对Python,Pandas和matplotlib / seaborn来说只是一点点新手,所以请耐心等待。
我有一个65k行的数据框
我试图在堆积条形图中绘制这个
我已经使用了这些初始设置(没有它们看起来比它们看起来更糟)我曾经尝试过一次切出它们以查看我是否可以使用seaborn来使我的故障排除更容易,但它似乎我真的需要它们才能让这个显示效果更加不错
#required libraries:
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
#for some improved visuals
import seaborn as sns
from pylab import rcParams
#this line enables the plots to be embedded into the notebook
%matplotlib inline
# Set some options as I have been used to having them
pd.set_option('html', True)
pd.set_option('max_columns', 40)
pd.set_option('max_rows', 20)
sns.set(style="ticks")
matplotlib.style.use('ggplot')
rcParams['figure.figsize'] = 15, 10
rcParams['font.size'] = 20
rcParams['axes.facecolor'] = 'white'
我对数据进行分组的代码如下所示:
HouseholdIncomeVSOccupation = workingdata.groupby(['house INCOME'
, 'OCCUPATION_M'])['house INCOME'].count().unstack('OCCUPATION_M')
我绘制图表的代码如下所示:
colors = ['#0066CC', '#33FF33', '#FF99CC', '#FDEBD0', '#CC9933'
, '#FF0000', 'black', '#3333FF', 'grey', '#CC66FF'
, '#339900','#FF3399','#FFFF66','#990000']
HouseholdIncomeVSOccupation.plot(kind='bar', stacked=True, color=colors)
我想添加一个标题
plt.title('Household Income VS Occupation')
我不太明白为什么我的绘图代码会使它成为一个子图,我确实认识到这是因为它是一个子图我上面有空标题,标题就在上面。
我想格式化一些事情:
我非常感谢社区在这方面的帮助,我非常享受我的Python发现之旅。我只需要让它们中的一些比我迄今为止所采用的方式更快地工作。当然喜欢能够快速轻松地处理数百万行的数据帧。
编辑: 获取ImportanceOfBeingErnest回复
后,这是工作代码colors = ['#0066CC', '#33FF33', '#FF99CC', '#FDEBD0', '#CC9933',
'#FF0000', 'black', '#3333FF', 'grey', '#CC66FF', '#339900',
'#FF3399','#FFFF66','#990000']
ax = HouseholdIncomeVSOccupation.plot(kind='bar', stacked=True, color=colors)
ax.set_title('Household Income VS Occupation')
ax.set_xlabel('Household Income')
ax.set_ylabel('Count')
plt.legend(bbox_to_anchor=(1.04,0.5), loc="center left", borderaxespad=0)
我按照链接到他关于如何格式化传说的其他优秀答案。这给了最后一行工作代码......
答案 0 :(得分:1)
更好的是告诉我如何将其作为主要图表而不是 是一个副图。
试
import matplotlib.pyplot as plt
plt.figure()
定位你的图例使用bb_to_anchor
参数;你的情节是0到1 X和0到1 Y;图表下面的任何东西都是负Y;图表左侧为负X;你可以添加ncol
的列;并展开传奇w / mode='expand'
图表外的图例,理想位于图表空间下方 条目从左到右排列在几行
plt.legend(bbox_to_anchor=(0., -0.3, 1., -0.4), mode="expand", ncol = 2)
右边图表外的传说
plt.legend(bbox_to_anchor=(1.05, 1))
我想为每个Axis命名
plt.xlabel()
plt.ylabel()
答案 1 :(得分:1)
您有两种选择,
将数据框绘制到现有轴。在这种情况下,您没有轴手柄,因此您可以使用当前轴
df.plot(..., ax=plt.gca())
首先创建绘图,然后再修改它,
ax = df.plot(...)
ax.set_title(...)
ax.set_xlabel(...)
有关如何从轴中获取图例,请参阅How to put the legend out of the plot。