2015-08-24 85 views
0

我正在尝试制作如下图所示的框和晶须图,每个颜色代表一个测量台。每个小节将从一个单独的数组派生。我已经包含了我目前情节的图片。Matplotlib聚簇多个系列的盒子和晶须图

目前我所有的数据都在单个数组中,但如果需要,我可以重新格式化它。我目前正在使用下面显示的代码绘制图表,但在改变它的同时也很好。

谢谢!

What I'd ideally like What I have now

f, ax = plt.subplots(nrows = 2, ncols =3, figsize=[10,10]) 

ax[0,0].boxplot(T_MAE, whis = 1.5, sym='') 
ax[1,0].boxplot(T_CORR, whis =1.5, sym='') 

ax[0,1].boxplot(WS_MAE, whis = 1.5, sym='') 
ax[1,1].boxplot(WS_CORR, whis =1.5, sym='') 

ax[0,2].boxplot(WD_RMSE, whis = 1.5, sym='') 
ax[1,2].boxplot(WD_CORR, whis =1.5, sym='') 

f.set_facecolor('white') 
plt.show()      
+0

什么是你的电流输出的问题?你有没有尝试过使它更接近你想要的输出? 你的数组的结构是什么? –

回答

2

我打得四处因为我很感兴趣推测这种图形的出来自己。

我生成,像这样一些数据:

%matplotlib inline 
import matplotlib.pyplot as plt 
import pandas as pd 
import seaborn as sns 
import numpy as np 

# generate some bogus data 
a = ['Temp', 'WS', 'WD'] 
b = ['Error','Correlation'] 
c = ['ST1', 'ST2', 'ST3'] * 10 
d = pd.MultiIndex.from_product([a, b, c], names=['measurement', 'type', 'station']) 
e = pd.DataFrame({'value': np.random.random_sample((180,))}, index=d) 
f = e.reset_index() 

它创建了一个数据帧的熊猫像这样。每一行/值都与其对应的测量站,测量类型等相关联

measurement type station value 
0 Temp Error ST1 0.147856 
1 Temp Error ST2 0.775522 
2 Temp Error ST3 0.219525 
3 Temp Error ST1 0.781051 
4 Temp Error ST2 0.611896 
5 Temp Error ST3 0.548077 
6 Temp Error ST1 0.155149 
7 Temp Error ST2 0.512718 
8 Temp Error ST3 0.678058 
(...) 
172 WD Correlation ST2 0.412141 
173 WD Correlation ST3 0.431907 
174 WD Correlation ST1 0.635392 
175 WD Correlation ST2 0.623895 
176 WD Correlation ST3 0.520754 
177 WD Correlation ST1 0.773108 
178 WD Correlation ST2 0.635676 
179 WD Correlation ST3 0.142240 

然后我使用FacetGrid绘制它。我必须使用这些设置来获得接近你所绘制的输出。

sns.set_style("white") 
g = sns.FacetGrid(f, col="measurement", row="type", 
       sharey=True, sharex=True) 
g.map(sns.boxplot, "station", "value", palette=['r', 'g', 'b']) 

(
g.set_axis_labels("", "val") 
.set_titles("{col_name}") 
.despine(bottom=True, left=True) 
) 


g.axes[0,0].set_ylabel("Error") 
g.axes[1,0].set_ylabel("Correlation") 

for h in g.axes[1,:]: 
    h.set_title('') 

enter image description here

+0

这看起来不错!你能告诉我一些关于你使用的'seaborn'模块吗?我用剩下的,但从来没有遇到过这个。 – HHains

+0

Seaborn是一个在Python中制作有吸引力和信息丰富的统计图形的库。它建立在matplotlib之上。它具有许多内置函数来生成这种图形,您可以根据不同的标准对数据进行分组,或者探索数据中的分布和相关性。阅读更多http://stanford.edu/~mwaskom/software/seaborn/index.html –

相关问题