简体   繁体   English

两个Y轴条形图:自定义Xticks

[英]Two Y axis Bar plot: custom xticks

I am trying to add custom xticks to a relatively complicated bar graph plot and I am stuck. 我试图将自定义xticks添加到一个相对复杂的条形图中,我被卡住了。

I am plotting from two data frames, merged_90 and merged_15 : 我正在从两个数据框, merged_90merged_15

merged_15
                 Volume     y_err_x      Area_2D     y_err_y
TripDate                                                    
2015-09-22  1663.016032  199.507503  1581.591701  163.473202

merged_90

                 Volume     y_err_x      Area_2D     y_err_y
TripDate                                                    
1990-06-10  1096.530711  197.377497  1531.651913  205.197493

I want to create a bar graph with two axes (ie Area_2D and Volume ) where the Area_2D and Volume bars are grouped based on their respective data frame. 我想创建一个带有两个轴(即Area_2DVolume )的Area_2D ,其中Area_2DVolume条形根据它们各自的数据帧进行分组。 An example script would look like: 示例脚本如下所示:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy


fig = plt.figure()
ax1 = fig.add_subplot(111)
merged_90.Volume.plot(ax=ax1, color='orange', kind='bar',position=2.5, yerr=merged_90['y_err_x'] ,use_index=False , width=0.1)
merged_15.Volume.plot(ax=ax1, color='red', kind='bar',position=0.9, yerr=merged_15['y_err_x'] ,use_index=False, width=0.1)


ax2 = ax1.twinx()
merged_90.Area_2D.plot(ax=ax2,color='green',  kind='bar',position=3.5, yerr=merged_90['y_err_y'],use_index=False, width=0.1)
merged_15.Area_2D.plot(ax=ax2,color='blue',  kind='bar',position=0, yerr=merged_15['y_err_y'],use_index=False, width=0.1)

ax1.set_xlim(-0.5,0.2)

x = scipy.arange(1)
ax2.set_xticks(x)
ax2.set_xticklabels(['2015'])
plt.tight_layout()
plt.show()

The resulting plot is: 结果图为:

情节缺少xtick

One would think I could change: 有人会认为我可以改变:

x = scipy.arange(1)
ax2.set_xticks(x)
ax2.set_xticklabels(['2015'])

to

x = scipy.arange(2)
ax2.set_xticks(x)
ax2.set_xticklabels(['1990','2015'])

but that results in: 但这导致:

混乱的情节

I would like to see the ticks ordered in chronological order (ie 1990,2015) 我希望按时间顺序排列刻度(即1990、2015)

Thanks! 谢谢!

Have you considered dropping the second axis and plotting them as follows: 您是否考虑过放下第二根轴并按照以下方式绘制它们:

ind = np.array([0,0.3])
width = 0.1
fig, ax = plt.subplots()
Rects1 = ax.bar(ind, [merged_90.Volume.values, merged_15.Volume.values], color=['orange', 'red'] ,width=width)
Rects2 = ax.bar(ind + width, [merged_90.Area_2D.values, merged_15.Area_2D.values], color=['green', 'blue'] ,width=width)
ax.set_xticks([.1,.4]) 
ax.set_xticklabels(('1990','2015'))

This produces: 这将产生:

在此处输入图片说明

I omitted the error and colors but you can easily add them. 我省略了错误和颜色,但是您可以轻松添加它们。 That would produce a readable graph given your test data. 给定您的测试数据,这将生成一个可读的图形。 As you mentioned in comments you would still rather have two axes, presumably for different data with proper scales. 正如您在评论中提到的那样,您仍然希望有两个轴,大概是针对具有适当比例的不同数据。 To do this you could do: fig = plt.figure() ax1 = fig.add_subplot(111) merged_90.Volume.plot(ax=ax, color='orange', kind='bar',position=2.5, use_index=False , width=0.1) merged_15.Volume.plot(ax=ax, color='red', kind='bar',position=1.0, use_index=False, width=0.1) ax2 = ax1.twinx() merged_90.Area_2D.plot(ax=ax,color='green', kind='bar',position=3.5,use_index=False, width=0.1) merged_15.Area_2D.plot(ax=ax,color='blue', kind='bar',position=0,use_index=False, width=0.1) ax1.set_xlim([-.45, .2]) ax2.set_xlim(-.45, .2]) ax1.set_xticks([-.35, 0]) ax1.set_xticklabels([1990, 2015]) 为此,您可以这样做:fig = plt.figure()ax1 = fig.add_subplot(111)merged_90.Volume.plot(ax = ax,color ='orange',kind ='bar',position = 2.5,use_index = False,width = 0.1)merged_15.Volume.plot(ax = ax,color ='red',kind ='bar',position = 1.0,use_index = False,width = 0.1)ax2 = ax1.twinx()merged_90.Area_2D .plot(ax = ax,color ='green',kind ='bar',position = 3.5,use_index = False,width = 0.1)merged_15.Area_2D.plot(ax = ax,color ='blue',kind =' bar',position = 0,use_index = False,width = 0.1)ax1.set_xlim([-。45,.2])ax2.set_xlim(-。45,.2])ax1.set_xticks([-。35,0 ])ax1.set_xticklabels([1990,2015])

This produces: 这将产生: 在此处输入图片说明

Your problem was with resetting just one axis limit and not the other, they are created as twins but do not necessarily follow the changes made to one another. 您的问题是仅重置一个轴限制,而不重置另一个,它们被创建为双胞胎,但不一定遵循彼此所做的更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM