条形图数据:

sum_values = {2000: 258004, 2001: 243411, 2002: 234801, 2003: 231303, 2004: 235103, 2005: 234102, 2006: 236045, 2007: 262238, 2008: 317133, 2009: 337785, 2010: 379818, 2011: 425237, 2012: 446610}


折线图的数据:

avg_values = {'2006': 29034, '2007': 29612, '2008': 28551, '2009': 39320, '2010': 30061, '2011': 24331, '2012': 23579, '2013': 17552, '2014': 17673, '2015': 19620, '2016': 20894}


我的图形代码片段:

plt.figure(1, figsize=(10,10))
barchart = plt.bar(list(sum_values.keys()), list(sum_values.values()), color='red')
linechart = plt.plot(list(sum_values.values()), color='blue')


我的图形结果的屏幕截图:
python - 使用matplotlib在同一图中使用不同的y轴绘制条形图和线图(无 Pandas )-LMLPHP


如何绘制带有次要y轴的折线图?
由于两个图表的x值不同,如何仅绘制常见的x值?

最佳答案

唯一的问题是,条形图数据中的键的类型为string。除此之外,您不提供线图的x值,因此avg_values只是在其索引上绘制。
因此,假设您已解决数据类型问题,则此代码应该可以正常工作:

plt.figure(1, figsize=(10,10))

barchart = plt.bar(sum_values.keys(), sum_values.values(), color='red')
plt.twinx()
linechart = plt.plot(avg_values.keys(), avg_values.values(), color='blue')


请注意,您不需要从字典的键或值中列出列表。

但是,如果由于某种原因无法更改sum_values.keys()的数据类型,则可以将类型强制转换为barplot命令的int inline,如下所示:

barchart = plt.bar(list(map(int, sum_values.keys())), sum_values.values(), color='red')


(对于地图对象,您确实需要列出其结果)



仅用于查看通用x值部分,可以在计算通用x值后设置x轴限制,例如:

commonx = [a for a in avg_values.keys() if a in sum_values.keys()]
plt.xlim(min(commonx) - .5, max(commonx) + .5)

关于python - 使用matplotlib在同一图中使用不同的y轴绘制条形图和线图(无 Pandas ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53901718/

10-10 18:03