如何根据python/matplotlib中的列名/标签名为方框图指定标签颜色
我在子图中有一系列的方框图(见图),但我想根据其DUT1或DUT2更改每个单独图的标签颜色。 下面是一个用于绘制方框图的df示例。使用类似的df绘制每个图,但包括来自不同设定点的测量值如何根据python/matplotlib中的列名/标签名为方框图指定标签颜色,python,pandas,matplotlib,Python,Pandas,Matplotlib,我在子图中有一系列的方框图(见图),但我想根据其DUT1或DUT2更改每个单独图的标签颜色。 下面是一个用于绘制方框图的df示例。使用类似的df绘制每个图,但包括来自不同设定点的测量值 DUT1 A DUT1 B DUT2 A DUT2 B 527 0.92342 0.96342 0.98342 1.00342 528 0.92754 0.88754 0.97754 0.97754 529 0.93655 0.95655 0.99655 0.91
DUT1 A DUT1 B DUT2 A DUT2 B
527 0.92342 0.96342 0.98342 1.00342
528 0.92754 0.88754 0.97754 0.97754
529 0.93655 0.95655 0.99655 0.91655
上面的每个数字是指定设定点处每次测量的DUT传感器和参考传感器之间的差值
下面是我如何创建方框图的每个子图的快照
fig, axes = plt.subplots(ncols = 4, nrows = 2, sharey = True, figsize = (10,6))
fig.add_subplot(111, frame_on = False)
plt.tick_params(labelcolor = 'none', bottom = False, left = False)
plt.ylabel('Difference from Reference PRT in $^\circ$F', labelpad=20)
boxplot1 = df_setpoint1.boxplot(column = ['DUT1 A','DUT1 B','DUT2 A','DUT2 B'], ax = axes[1,0], rot=45)
boxplot2 = df_setpoint2.boxplot(column = ['DUT1 A','DUT1 B','DUT2 A','DUT2 B'], ax = axes[1,1], rot=45)
axes[1,0].set_title('Set Point -38.5$^\circ$F')
axes[1,1].set_title('Set Point -25$^\circ$F')
fig.suptitle('Temperature Distribution for Temperature Accuracy Testing')
plt.tight_layout()
plt.show()
经过一些搜索后,我在确定如何为每个打印标签指定颜色时遇到了问题,因为我不是单独创建每个框打印,而是从每个数据帧中的指定列创建。我遇到了很多框的自定义填充颜色,并添加了带有自定义颜色的图例,但我只是想控制x轴上文本标签的颜色。虽然文本标签的颜色不是很方便,但是
matplotlib
后端的箱线图着色是可行的,需要在每个打补丁的艺术家之间循环。对于每个配对的DUT1
和DUT2
与每个艺术家一起运行elementwsiezip
循环
下面使用OP提供的数据为一个子批次运行。为了避免重复,将行集成到一个定义的方法中,并通过它运行每个子批次,或者为层添加一个顶部的,以在轴
数组中的所有生成子批次上迭代
import matplotlib.patches as mpatches
...
# BOX PLOT LEGEND
blue_patch = mpatches.Patch(color='blue', label='The red data')
green_patch = mpatches.Patch(color='green', label='The blue data')
fig.legend(handles=[blue_patch, green_patch], labels=['A', 'B'],
ncol=2, loc='upper center', bbox_to_anchor=(0.5, 0.95))
# BOX PLOT
boxplot1 = df_setpoint1.boxplot(column = ['DUT1 A','DUT1 B','DUT2 A','DUT2 B'],
ax=axes[1,0], patch_artist=True, rot=45)
# BOX PLOT COLORING
colors = ['blue', 'blue', 'green', 'green']
for i,(artist, col) in enumerate(zip(axes[1,0].artists, colors)):
artist.set_edgecolor(col)
artist.set_facecolor(col)
# Each box has 6 associated Line2D objects (to make the whiskers, fliers, etc.)
# Loop over them here, and use the same colour as above
for j in range(i*6,i*6+4):
line = axes[1,0].lines[j]
line.set_color(col)
line.set_mfc(col)
line.set_mec(col)
line.set_linewidth(0.5)
...
fig.tight_layout(rect=[0, 0.03, 1, 0.90])
plt.show()
@Parfait我编辑了这篇文章,加入了df的样本。谢谢。你是说x轴标签的颜色吗?为什么不单独给箱线图上色?对于可读性,轴应保持相同的颜色,留下绘图区域进行比较。无法立即看到在轴内调整标题的方法。@Parfait我想我对可读性和统一的颜色得出了相同的结论,所以我对我所拥有的感到满意。谢谢你的意见!