【问题标题】:Matplotlib not shown x tick labelsMatplotlib 未显示 x 刻度标签
【发布时间】:2022-01-01 04:59:16
【问题描述】:

我有一个如下的数据框(可重现的数据):

import pandas as pd
import numpy as np
from datetime import datetime

np.random.seed(365)
rows = 2
start_date=datetime.strptime('2020-01-01 00:00:00', '%Y-%m-%d %H:%M:%S')
data = np.random.uniform(2.1, 6.5, size=(rows, cols))
index = pd.bdate_range(start_date, freq='H', periods=rows)

df = pd.DataFrame(data=data, index=index, columns=['Ta']) #Ta: Room temperature
                           Ta
2020-01-01 00:00:00  6.242405
2020-01-01 01:00:00  4.923052
2020-01-01 02:00:00  5.112286
2020-01-01 03:00:00  4.689673
2020-01-01 04:00:00  4.493104
2020-01-01 05:00:00  3.719512
2020-01-01 06:00:00  5.473153
2020-01-01 07:00:00  3.442055
2020-01-01 08:00:00  4.045178
2020-01-01 09:00:00  2.585951
2020-01-01 10:00:00  4.028845
2020-01-01 11:00:00  5.411510
2020-01-01 12:00:00  3.383155
2020-01-01 13:00:00  5.997180
2020-01-01 14:00:00  6.485442
2020-01-01 15:00:00  4.240901
2020-01-01 16:00:00  3.637405
2020-01-01 17:00:00  2.766216
2020-01-01 18:00:00  6.024569
2020-01-01 19:00:00  5.503587
2020-01-01 20:00:00  5.532941
2020-01-01 21:00:00  4.251602
2020-01-01 22:00:00  4.444596
2020-01-01 23:00:00  2.935362

我正在尝试绘制一整天的温度,但我看不到带有特定日期的刻度线。只有第一个出现,我想查看每一个刻度。

代码如下:

df['Ta'].plot(figsize=(20,12),legend=True,subplots=True,ylim=(0,12),
              xticks=list(df.index.values),fontsize=10,grid=True,
              rot=0, xlim=(pd.Timestamp('2020-01-01 00:00:00'),pd.Timestamp('2020-01-01 23:00:00')))

情节

我手头上的所有东西我都试过了,但我想不通。

【问题讨论】:

    标签: python pandas date datetime


    【解决方案1】:

    使用matplotlib注解给图表附加标签:

    data="""Date,Ta
    2020-01-01 00:00:00,6.242405
    2020-01-01 01:00:00,4.923052
    2020-01-01 02:00:00,5.112286
    2020-01-01 03:00:00,4.689673
    2020-01-01 04:00:00,4.493104
    2020-01-01 05:00:00,3.719512
    2020-01-01 06:00:00,5.473153
    2020-01-01 07:00:00,3.442055
    2020-01-01 08:00:00,4.045178
    2020-01-01 09:00:00,2.585951
    2020-01-01 10:00:00,4.028845
    2020-01-01 11:00:00,5.411510
    2020-01-01 12:00:00,3.383155
    2020-01-01 13:00:00,5.997180
    2020-01-01 14:00:00,6.485442
    2020-01-01 15:00:00,4.240901
    2020-01-01 16:00:00,3.637405
    2020-01-01 17:00:00,2.766216
    2020-01-01 18:00:00,6.024569
    2020-01-01 19:00:00,5.503587
    2020-01-01 20:00:00,5.532941
    2020-01-01 21:00:00,4.251602
    2020-01-01 22:00:00,4.444596
    2020-01-01 23:00:00,2.935362
    """
    
    def plot_df(df, x, y, title="", xlabel='Date', ylabel='Value', dpi=100):
        plt.figure(figsize=(20,12), dpi=dpi)
        plt.plot(x, y, color='tab:red')
        plt.xlim([pd.Timestamp('2020-01-01 00:00:00'),pd.Timestamp('2020-01-01 23:00:00')])
        plt.ylim(0,12)
        items=range(0,len(df))
        for index in items:
            y2=y[index]
            x2=x[index]
            value="{:.2f}".format(y2)
            plt.annotate(xy=[x2,y2],s=value)
        plt.gca().set(title=title, xlabel=xlabel, ylabel=ylabel)
        plt.show()
    
    df = pd.read_csv(StringIO(data), sep=',', index_col=0,parse_dates=['Date'])
    plot_df(df, x=df.index, y=df.Ta, title='Temparature')
    

    【讨论】:

    • 谢谢!有用。只有一件事,使用plt.annotate(xy=[x2,y2],s=str(y2)),该图显示每个点上的标记值。这些代码行是用于标签还是用于标记?
    • 我正在寻找 x 轴上标签的附件。我想要一个在 xaxis 上显示每天时间的网格
    • value="{:2e}".format(y2) if index%2==0: y2=1 else: y2=2 ax.annotate(xy=[x2,y2],s =值)
    【解决方案2】:

    在绘图之前过滤您的数据框:

    df.loc[df.index.normalize() == '2020-01-01'] \
      .plot(figsize=(20,12), legend=True, subplots=True,
            ylim=(0,12), fontsize=10, grid=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2021-11-17
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2013-12-30
      相关资源
      最近更新 更多