我有一个Pandas系列,其中包含我想要绘制计数的值。这大致创造了我想要的东西:
dy = sns.countplot(rated.year, color="#53A2BE")
axes = dy.axes
dy.set(xlabel='Release Year', ylabel = "Count")
dy.spines['top'].set_color('none')
dy.spines['right'].set_color('none')
plt.show()
问题在于缺少数据。有31年的评级,但超过42年的时间跨度。这意味着应该有一些没有显示的空箱。有没有办法在Seaborn / Matplotlib中配置它?我应该使用其他类型的图表,还是有另一种解决方案?
我考虑过调查是否可以将其配置为时间序列,但我对评分量表存在同样的问题。因此,以1-10的比例计算例如4可能为零,因此' 4'不在Pandas数据系列中,这意味着它也不会出现在图表中。
我喜欢的结果是x轴上的满刻度,y轴上的计数(步长为1),并显示缺少刻度实例的零/空仓,而不是只显示可获得数据的下一个bin。
修改
数据(rated.year)看起来像这样:
import pandas as pd
rated = pd.DataFrame(data = [2016, 2004, 2007, 2010, 2015, 2016, 2016, 2015,
2011, 2010, 2016, 1975, 2011, 2016, 2015, 2016,
1993, 2011, 2013, 2011], columns = ["year"])
它有更多值,但格式相同。正如你在...中看到的那样。
rated.year.value_counts()
..有很多x值,图中的计数必须为零。目前的情节看起来像:
答案 0 :(得分:7)
我通过在我的问题的评论中使用 @mwaskom 建议的解决方案解决了这个问题。即添加一个'命令'具有年份的所有有效值的计数图,包括计数等于零的那些值。这是生成图表的代码:
import pandas as pd
import seaborn as sns
rated = pd.DataFrame(data = [2016, 2004, 2007, 2010, 2015, 2016, 2016, 2015,
2011, 2010, 2016, 1975, 2011, 2016, 2015, 2016,
1993, 2011, 2013, 2011], columns = ["year"])
dy = sns.countplot(rated.year, color="#53A2BE", order = list(range(rated.year.min(),rated.year.max()+1)))
axes = dy.axes
dy.set(xlabel='Release Year', ylabel = "Count")
dy.spines['top'].set_color('none')
dy.spines['right'].set_color('none')
plt.show()
答案 1 :(得分:1)
通过创建一个转换为数据帧的重建索引系列来考虑seaborn barplot:
# REINDEXED DATAFRAME
rated_ser = pd.DataFrame(rated['year'].value_counts().\
reindex(range(rated.year.min(),rated.year.max()+1), fill_value=0))\
.reset_index()
# SNS BAR PLOT
dy = sns.barplot(x='index', y='year', data=rated_ser, color="#53A2BE")
dy.set_xticklabels(dy.get_xticklabels(), rotation=90) # ROTATE LABELS, 90 DEG.
axes = dy.axes
dy.set(xlabel='Release Year', ylabel = "Count")
dy.spines['top'].set_color('none')
dy.spines['right'].set_color('none')