[英]Plot bar and line in same plot, different y-axes using matplotlib (no pandas)
條形圖數據:
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')
如何繪制帶有輔助 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 類型,如下所示:
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)
過濾常見年份的數據准備:
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}
from collections import OrderedDict
avg_values = {int(k):v for k,v in avg_values.items() if int(k) in sum_values.keys()}
sum_values = {k:v for k,v in sum_values.items() if k in avg_values.keys()}
sum_values=OrderedDict(sorted(sum_values.items()))
avg_values=OrderedDict(sorted(avg_values.items()))
用輔助軸繪制共同年!
plt.figure(1, figsize=(5,5))
barchart = plt.bar(avg_values.keys(), avg_values.values(), color='red')
plt.twinx()
linechart = plt.plot(sum_values.keys(), sum_values.values(), color='blue',label='Sum')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.