从多索引的Pandas数据帧中绘制3个不同的图

时间:2017-05-01 23:58:52

标签: python pandas matplotlib bar-chart

下面是我的多索引数据框

    travel_spending
state   ethinicity  
CA  Asian   233.404580
MA  Asian   748.117647
NY  Asian   350.880000
CA  Black   146.898148
MA  Black   99.849057
NY  Black   125.206897
CA  Chinese 387.398601
MA  Chinese 119.636364
NY  Chinese 263.245283
CA  Hispanic    131.156484
MA  Hispanic    200.220859
NY  Hispanic    175.738589
CA  American Indian 36.500000
MA  American Indian 67.500000
NY  American Indian 81.800000
CA  Japanese    365.029703
MA  Japanese    28.666667
NY  Japanese    241.500000
CA  Other   257.953356
MA  Other   208.178174
NY  Other   255.144436
CA  Portuguese  26.000000
MA  Portuguese  22.000000
CA  White   222.322485
MA  White   167.293194
NY  White   140.080838

我能够很容易地从这些中生成子图:

  travel_df_new.unstack(level=0).plot(kind='bar', subplots=True)

bar graphs

我想摆脱图表中的额外文本,因为它是多余的,并且也存在于其之外 travel_spending,CA travel_spending MA,travel_spending,NY

另外,我想让x轴(Ethinicity)的字体更清晰,并使其更暗。

使用matplotlib图表可以实现这些目的吗?

1 个答案:

答案 0 :(得分:1)

删除图例

您可以将legend=False作为参数传递给数据框的.plot()方法来删除图例:

travel_df_new.unstack(level=0).plot(kind='bar', subplots=True, legend=False)

图形外观

  

(注意:在我看来,OP可能正在使用ggplot样式   使用matplotlib,但问题中未指定。基于   这个,我在这个例子中使用了ggplot样式。)

import matplotlib
matplotlib.style.use('ggplot')

一个选项是在创建绘图后立即为当前轴设置tick_params。您可以使用plt.gca()检索当前轴。通过调用轴对象的tick_params()方法指定轴刻度的外观。下面的示例显示仅为x轴设置labelsize和labelcolor。

import matplotlib.pyplot as plt
travel_df_new.unstack(level=0).plot(kind='bar', subplots=True, legend=False)
plt.gca().tick_params(axis='x', labelsize='x-large', labelcolor='k')

上述方法仅适用于当前情节,但您也可以customize the appearance of elements in all matplotlib figures by setting values in the rcParams dictionary。例如,这会更改xticks的颜色和大小:

import matplotlib.pyplot as plt
plt.rcParams['xtick.color']='k'
plt.rcParams['xtick.labelsize']='x-large'

travel_df_new.unstack(level=0).plot(kind='bar', subplots=True, legend=False)

这些设置产生以下图表:

Easier to read x-ticks

旋转刻度标签

看起来设置labelrotation参数的功能将在未来版本的matplotlib中添加到tick_params()。它在latest documentation中显示为一个选项,但在版本2.0中不可用。

在当前版本的matplotlib(< = 2.0.x)中,使用plt.setp()设置旋转。

travel_df_new.unstack(level=0).plot(kind='bar', subplots=True, legend=False)
plt.setp(plt.xticks()[-1], size='x-large', color='k', rotation=45, ha='right')

此调用还可以设置标签的colorsize,因此您可以通过此次调用覆盖所有刻度线格式。 ha参数控制旋转标签的水平对齐方式,并接受值“left”,“center”和“right”。