Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 是否可以使用matplotlib将xaxis设置为仅显示开始日期和结束日期?_Python 3.x_Pandas_Datetime_Matplotlib_Plot - Fatal编程技术网

Python 3.x 是否可以使用matplotlib将xaxis设置为仅显示开始日期和结束日期?

Python 3.x 是否可以使用matplotlib将xaxis设置为仅显示开始日期和结束日期?,python-3.x,pandas,datetime,matplotlib,plot,Python 3.x,Pandas,Datetime,Matplotlib,Plot,我正在从pandas数据框中使用python3和matplotlib进行绘图。我的数据框如下所示: date | value1 | value2 | price -------------------------------------- 2019-09-01 | 300 | 125 | 850 2019-09-02 | 400 | 250 | 625 . | . | . | .

我正在从pandas数据框中使用python3和matplotlib进行绘图。我的数据框如下所示:

    date      | value1 | value2 | price
 --------------------------------------
   2019-09-01 |  300   |   125  | 850
   2019-09-02 |  400   |   250  | 625
       .      |   .    |    .   |  .
       .      |   .    |    .   |  .
       .      |   .    |    .   |  .
   2019-11-14 |  216   |   543  | 793
date是datetime对象,value1、value2和price都是整数/浮点数。 我将value1、value2绘制为堆叠条形图,将price绘制为同一图形上两个轴上的一条线,使用第二个轴显示xticks(注意,stacked_bar是由df制成的groupby数据帧,price是stacked bar中日期的对应价格。我的代码ex很简单,实际上在我的绘图函数中显示了这一点,因为这不是问题所在,所以我只是想了解一下我在使用什么):


有没有一种简单的方法可以让matplotlib在这里以xtick的形式显示结束日期?我已经尝试了很多方法来正确设置刻度的格式,但我似乎找不到正确的刻度。我正准备让x轴不可见,并将日期范围显示为“9-01到11-14”这样的标签。例如参考,在显示的图中,我没有对xticks进行任何调整,这是它在运行时的显示方式。

在以下示例中,日期设置为用于生成第一个和最后一个刻度标签的索引:

将numpy作为np导入#v 1.19.2
作为pd#v 1.2.3进口大熊猫
将matplotlib.pyplot作为plt#v 3.3.4导入
#创建示例数据集
rng=np.random.default\u rng(seed=1)
日期=pd.日期范围('2019-09-01','2019-11-14',频率'D')
value1=rng.integers(0,2000,size=date.size)
value2=rng.integers(0,2000,size=date.size)
price=800+np.cumsum(整数(-100101,size=date.size))
df=pd.DataFrame(dict(value1=value1,value2=value2,Price=Price),index=date)
#创建具有共享x轴的绘图,并使用_index=False将其正确对齐
图(顶部,bot)=plt.子地块(nrows=2,sharex=True,figsize=(10,6))
df['value1','value2']]。绘图(种类='bar',堆叠=真,ax=顶部)
df['Price'].绘图(使用指数=False,ax=bot)
#设置x轴刻度的格式
top.xaxis.set_可见(False)
bot.set_xticks([0,len(df)-1])
bot.set_xticks([],minor=True)
bot.set_xticklabel([date.strftime(“%m-%d”)作为df.index[[0,-1]]中的日期);

这是一个matplotlib问题,但如果您提供一个最小的工作示例(包括可加载的数据子集),您将获得更多响应。基本思想是在底部轴上同时设置Xtick和xticklabel。没有实际数据,我不清楚的是“date”是字符串还是datetime。您能提供您尝试过的代码吗?
fig,ax = plt.subplots(nrows=2)
fig.set_size_inches(10,6)
stacked_bar.plot(kind='bar',stacked=True,ax=ax[0])
df['Price'].plot(ax=ax[1])