Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib:如何在两个单独的轴上显示条形图和直线的图例?_Python_Matplotlib_Legend_Multiple Axes - Fatal编程技术网

Python Matplotlib:如何在两个单独的轴上显示条形图和直线的图例?

Python Matplotlib:如何在两个单独的轴上显示条形图和直线的图例?,python,matplotlib,legend,multiple-axes,Python,Matplotlib,Legend,Multiple Axes,我在左轴上绘制条形图,在右轴上绘制折线图。如何在同一图例框中显示两者的图例 使用下面的代码,我得到两个单独的图例框;另外,我需要手动指定第二个图例的位置,需要大量的尝试和错误,否则它会与第一个图例重叠 import pandas as pd import matplotlib.pyplot as plt import matplotlib df=pd.DataFrame() df["bar"]=[40,35,50,45] df["line"]=[.5,.3,.2,.6] fig,ax=plt

我在左轴上绘制条形图,在右轴上绘制折线图。如何在同一图例框中显示两者的图例

使用下面的代码,我得到两个单独的图例框;另外,我需要手动指定第二个图例的位置,需要大量的尝试和错误,否则它会与第一个图例重叠

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib

df=pd.DataFrame()
df["bar"]=[40,35,50,45]
df["line"]=[.5,.3,.2,.6]

fig,ax=plt.subplots(2)

l1 = ax[0].bar(df.index, df["bar"], label='my bar chart (left axis)', color='royalblue', width = 0.55)
ax0b=ax[0].twinx()
l2 = ax0b.plot(df.index,  df['line'], label='my line (right axis)',color='tomato',marker='.', ls='dashed')

ax[0].legend(loc='upper left', fancybox=True, title='My title')
ax0b.legend(bbox_to_anchor=(0.155,0.8), loc=1)    
plt.show()
如果我在两个不同的轴上有两条线,而不是条形图和折线图,我会:

myl=l1+l2
labs=[l.get_label() for l in myl]
ax[0].legend(myl, labs, loc='upper left')
但这对我来说不起作用。我得到:

myl=l1+l2
TypeError: can only concatenate tuple (not "list") to tuple

我想这一定是因为bar()和plot()返回两个不同的对象,而这两个对象不能连接起来。

python错误的好处在于,它们通常可以被逐字理解并直接告诉您问题所在

“TypeError”告诉您存在类型问题。您可以打印以下类型:

print(type(l1)) # <class 'matplotlib.container.BarContainer'>
print(type(l2)) # <type 'list'>
myl=[l1]+l2