2015-04-21 8 views
7

का उपयोग करके बॉक्सप्लॉट में बिंदुओं का एक बिखरना जोड़ना मैंने this article (Fig.2) में यह अद्भुत बॉक्सप्लॉट देखा है। एक्स अनुक्रमित काला अंक (एक यादृच्छिक क्रम में), वाई ब्याज की चर रहा है:matplotlib

A wonderful boxplot

आप देख सकते हैं, यह एक boxplot जिस पर काला अंक की एक बिखराव आरोपित कर रहे हैं। मैं Matplotlib का उपयोग कर कुछ ऐसा करना चाहता हूं, लेकिन मुझे नहीं पता कि कहां से शुरू करना है। अब तक, boxplots मैं ऑनलाइन पाया है जो जिस तरह से कम शांत कर रहे हैं और इस तरह दिखेगा:

Usual boxplots

matplotlib के प्रलेखन: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.boxplot

तरीके boxplots colorize करने के लिए: https://github.com/jbmouret/matplotlib_for_papers#colored-boxes

+0

संबंधित हो सकती है: http://stackoverflow.com/q/28521828/376454 – Wok

उत्तर

12

क्या आप एक्स-अक्ष में जिटर जोड़ने का एक तरीका ढूंढ रहे हैं।

कुछ इस here से लिया की तरह:

bp = titanic.boxplot(column='age', by='pclass', grid=False) 
for i in [1,2,3]: 
    y = titanic.age[titanic.pclass==i].dropna() 
    # Add some random "jitter" to the x-axis 
    x = np.random.normal(i, 0.04, size=len(y)) 
    plot(x, y, 'r.', alpha=0.2) 

enter image description here

लिंक का हवाला देते हुए: एक boxplot के लिए अतिरिक्त जानकारी जोड़ने के लिए

एक तरह से वास्तविक डेटा ओवरले करने के लिए है, यह आमतौर पर छोटे- या मध्यम आकार की डेटा श्रृंखला के साथ सबसे उपयुक्त है। जब डेटा घने होते हैं, ट्रिक के एक जोड़े की मदद से ऊपर दृश्य प्रयोग किया है:

  1. x- अक्ष
  2. overstriking से बचने के लिए अंक आंशिक रूप से पारदर्शी
  3. यादृच्छिक "घबराना" जोड़ने बनाने के लिए अल्फा स्तर को कम

कोड इस तरह दिखता है:

import pylab as P 
import numpy as np 

# Define data 
# Define numBoxes 

P.figure() 

bp = P.boxplot(data) 

for i in range(numBoxes): 
    y = data[i] 
    x = np.random.normal(1+i, 0.04, size=len(y)) 
    P.plot(x, y, 'r.', alpha=0.2) 

P.show() 
+5

अच्छा जवाब। कृपया दूसरों के लिए अपने कोड को पुन: उत्पन्न करने के लिए आसान बनाने के लिए सभी आवश्यक आयात जोड़ने पर विचार करें। – cel

3

पर विस्तार किरुबास का समाधान और साजिश भाग के लिए केवल matplotlib का उपयोग करना (कभी-कभी मुझे matplotlib के साथ पांडा प्लॉट स्वरूपण में कठिनाई होती है)।

from matplotlib import cm 
import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

# initialize dataframe 
n = 200 
ngroup = 3 
df = pd.DataFrame({'data': np.random.rand(n), 'group': map(np.floor, np.random.rand(n) * ngroup)}) 

group = 'group' 
column = 'data' 
grouped = df.groupby(group) 

names, vals, xs = [], [] ,[] 

for i, (name, subdf) in enumerate(grouped): 
    names.append(name) 
    vals.append(subdf[column].tolist()) 
    xs.append(np.random.normal(i+1, 0.04, subdf.shape[0])) 

plt.boxplot(vals, labels=names) 
ngroup = len(vals) 
clevels = np.linspace(0., 1., ngroup) 

for x, val, clevel in zip(xs, vals, clevels): 
    plt.scatter(x, val, c=cm.prism(clevel), alpha=0.4) 

enter image description here

+0

पायथन 3 उपयोगकर्ताओं के लिए, आपको मानचित्र को सूची में लपेटने की आवश्यकता होगी, जैसे: 'समूह': सूची (मानचित्र (np.floor, np.random.rand (n) * ngroup)) ' – jss367