Python(twinx绘图)古怪图

Python(twinx绘图)古怪图,python,pandas,matplotlib,legend,twinx,Python,Pandas,Matplotlib,Legend,Twinx,编辑:图形现在已修复,但绘制图例时遇到问题。它仅显示其中一个绘图的图例。如下图所示 我正试图用twinx绘制双轴图形,但正如下图所示,我面临一些困难 欢迎任何意见!如果您需要任何其他信息,我很乐意提供给您 与绘制z轴之前的原始值相比 我不确定为什么我的图形是这样的,因为在最初绘制我的第二个y轴,粉色线之前,收盘值图形可以被完美地看到,但现在它似乎被切割了 这可能是由于我的数据如下 链接到testing1.csv: 我目前拥有的代码: # read csv into variable sg_df_

编辑:图形现在已修复,但绘制图例时遇到问题。它仅显示其中一个绘图的图例。如下图所示

我正试图用twinx绘制双轴图形,但正如下图所示,我面临一些困难

欢迎任何意见!如果您需要任何其他信息,我很乐意提供给您

与绘制z轴之前的原始值相比

我不确定为什么我的图形是这样的,因为在最初绘制我的第二个y轴,粉色线之前,收盘值图形可以被完美地看到,但现在它似乎被切割了

这可能是由于我的数据如下

链接到testing1.csv:

我目前拥有的代码:

# read csv into variable
sg_df_merged = pd.read_csv("testing1.csv", parse_dates=[0], index_col=0)

# define figure
fig = plt.figure()

fig, ax5 = plt.subplots()
ax6 = ax5.twinx()

x = sg_df_merged.index
y = sg_df_merged["Adj Close"]
z = sg_df_merged["Singapore"]

curve1 = ax5.plot(x, y, label="Singapore", color = "c")
curve2 = ax6.plot(x, z, label = "Face Mask Compliance", color = "m")
curves = [curve1, curve2]

# labels for my axis
ax5.set_xlabel("Year")
ax5.set_ylabel("Adjusted Closing Value ($)")
ax6.set_ylabel("% compliance to wearing face mask")
ax5.grid #not sure what this line does actually

# set x-axis values to 45 degree angle
for label in ax5.xaxis.get_ticklabels():
    label.set_rotation(45)
ax5.grid(True, color = "k", linestyle = "-", linewidth = 0.3)

plt.gca().legend(loc='center left', bbox_to_anchor=(1.1, 0.5), title = "Country Index")
plt.show(); 
起初,我认为这是因为我的excel有完整的空行,但后来我删除了可以找到的行

此外,我也尝试过插值,但不知何故,它不起作用。我们非常欢迎对此提出任何建议

只删除了所有NaN所在的行。和NaN还有很多争吵。 为了让matplotlib在两个数据点之间绘制连接线,这些点必须是连续的。 绘图API未连接NaN值之间的数据 这可以通过将pandas.Series转换为数据帧并使用.dropna来解决。 请注意,x已被删除,因为它与y或z的索引长度不匹配。它们在之后变短了。 y现在是一个单独的数据帧,其中使用.dropna。 z也是一个单独的数据帧,其中使用.dropna。 曲线图的x轴是各自的索引。 将csv读入变量 sg_df_merged=pd.read_csvtest.csv,parse_dates=[0],index_col=0 定义图形 图,ax5=plt.子批次IGSIZE=8,6 ax6=ax5.twinx 选择要打印的特定列并删除其他列 y=pd.DataFramesg\U df\U合并[Adj Close].dropna z=pd.DataFramesg_df_merged[Singapore].dropna 添加带有标记的绘图 曲线1=ax5.ploty.index,“调整关闭”,数据=y,标签=Singapore,颜色=c,标记=o 曲线2=ax6.plotz.index,“Singapore”,数据=z,标签=面罩合规性,颜色=m,标记='o' 我的轴的标签 ax5.set_xlabelYear ax5.1设置未调整的收盘价$ ax6.设置佩戴口罩的符合性百分比 旋转xticks ax5.xaxis.set_tick_paramsrotation=45 将网格添加到ax5 ax5.gridTrue,颜色=k,线型=-,线宽=0.3 为两个轴创建图例 曲线=曲线1+曲线2 标签=[l.get_曲线中l的标签] ax5.legendcurves,labels,loc='中间偏左',bbox_to_anchor=1.1,0.5,title=Country Index 节目 只删除了所有NaN所在的行。和NaN还有很多争吵。 为了让matplotlib在两个数据点之间绘制连接线,这些点必须是连续的。 绘图API未连接NaN值之间的数据 这可以通过将pandas.Series转换为数据帧并使用.dropna来解决。 请注意,x已被删除,因为它与y或z的索引长度不匹配。它们在之后变短了。 y现在是一个单独的数据帧,其中使用.dropna。 z也是一个单独的数据帧,其中使用.dropna。 曲线图的x轴是各自的索引。 将csv读入变量 sg_df_merged=pd.read_csvtest.csv,parse_dates=[0],index_col=0 定义图形 图,ax5=plt.子批次IGSIZE=8,6 ax6=ax5.twinx 选择要打印的特定列并删除其他列 y=pd.DataFramesg\U df\U合并[Adj Close].dropna z=pd.DataFramesg_df_merged[Singapore].dropna 添加带有标记的绘图 曲线1=ax5.ploty.index,“调整关闭”,数据=y,标签=Singapore,颜色=c,标记=o 曲线2=ax6.plotz.index,“Singapore”,数据=z,标签=面罩合规性,颜色=m,标记='o' 我的轴的标签 ax5.set_xlabelYear ax5.1设置未调整的收盘价$ ax6.设置佩戴口罩的符合性百分比 旋转xticks ax5.xaxis.set_tick_paramsrotation=45 将网格添加到ax5 ax5.gridTrue,颜色=k,线型=-,线宽=0.3 为两个轴创建图例 曲线=曲线1+曲线2 标签=[l.get_曲线中l的标签] ax5.legendcurves,labels,loc='中间偏左',bbox_to_anchor=1.1,0.5,title=Country Index 节目
请查看答案的更新。我已经为图例添加了一个修复程序,包括两个轴的标签,添加了标记,以明确数据点的位置,并更新了实现xtick旋转的代码。@TrentonMcKinney哇,我真的非常感谢您的帮助!如果你在毕业典礼结束后来新加坡,我很乐意带你出去喝咖啡!谢谢在LinkedIn或Twitter上添加我。如果我在你的地盘上,我会让你坚持下去。我的联系人信息在我的SO个人资料中。请查看答案的更新。我已经为图例添加了一个修复程序,包括两个轴的标签,添加了标记,以明确数据点的位置,并更新了实现xtick旋转的代码。@TrentonMcKinney哇,我真的非常感谢您的帮助!如果你愿意,我很乐意带你出去喝咖啡
毕业典礼结束后有没有来过新加坡!谢谢在LinkedIn或Twitter上添加我。如果我在你的地盘上,我会让你坚持下去。我的联系人信息在我的SO个人资料中。