簡體   English   中英

如何更改 matplotlib 中刻度標簽的比例?

[英]How to change the scale of ticklabels in matplotlib?

我有一個問題,不僅涉及修改 xticklabel 文本,還涉及嘗試逐日重新縮放它。

我用 Jan-01 到 Dec-31 的數據繪制了一個 plot,繪制的默認系列是以日期為索引的隨機值。

日期 01-01 -16.0 01-02 -26.7 01-03 -26.7 01-04 -26.1 01-05 -15.0... 12-27 -13.8 12-28 -16.6 12-29 -15.0 12-30 -14.4 12 -31 -15.0 名稱:Data_Value,長度:365,數據類型:float64

output 看起來一團糟,因為每個 xticklabel 都在那里,而旋轉實際上是無用的。 我想將它們從幾天重新調整為幾個月,最佳做法是什么? 我寫過一些這樣的代碼,但我認為它不夠聰明。 有什么建議嗎? 在此處輸入圖像描述

這是我的代碼:

labels = [item.get_text() for item in ax.get_xticklabels()]
n = 0
for item in labels:
    n=n+1
    if n%15==0 and n%10 !=0:
        labels[n-1]= calendar.month_name[int(labels[n-1].split('-')[0])]
    else:
        labels[n-1]=''

ax.set_xticklabels(labels)
plt.show()

ax.set_xticklabels(labels) plt.show()`

這是結果: 在此處輸入圖像描述

讓我們從必要的進口開始:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdate

我假設源數據是一個pandasonic DataFrame,創建如下:

ind = pd.date_range(start='2021-01-01', end='2021-12-31')
np.random.seed(0)  # To get repatable results
# Upper / lower values
upp = np.random.normal(loc=8, scale=0.5, size=ind.size)
low = np.random.normal(loc=3, scale=0.4, size=ind.size)
# This will be used below
df = pd.DataFrame({'Upper': upp, 'Lower': low}, index = ind)

和:

  • 包含一年中連續日期的索引,
  • 下部上部列包含兩條曲線的值。

使用“每月” x軸標簽生成 plot 的可能解決方案之一是:

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(df)
ax.fill_between(df.index, df.Upper, df.Lower, alpha=0.1)
ax.set_ylim(0, 10)
locator = mdate.MonthLocator()
fmt = mdate.DateFormatter('%b')
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(fmt)
plt.show()

結果是:

在此處輸入圖像描述

請注意,您有兩個Jan標簽,一個代表年初,第二個代表年底。

我的假設是,當您繪制日期時,您的日期仍然是字符串格式。 嘗試將它們轉換為日期時間格式,然后 matplot 應該從那里完成繁重的工作。 此外,您可以使用plt.xticks(size = 20)或任何您想要的尺寸來縮放刻度標簽。 例子:

import pandas as pd
import matplotlib.pyplot as plt

dates = ['19 March 2022', '20 March 2022', '21 March 2022', '22 March 2022', 
         '19 April 2022', '20 April 2022', '21 April 2022', '22 April 2022',
         '19 May 2022', '20 May 2022','21 May 2022','22 May 2022',
         '19 June 2022', '20 June 2022','21 June 2022','22 June 2022',
         '19 July 2022', '20 July 2022','21 July 2022','22 July 2022',
         '19 August 2022', '20 August 2022','21 August 2022','22 August 2022',
         '19 September 2022', '20 September 2022','21 September 2022','25 September 2022',
         '19 October 2022', '20 October 2022','21 October 2022','22 October 2022',
         '19 November 2022', '20 November 2022','21 November 2022','22 November 2022',
         '19 December 2022', '20 December 2022', '21 December 2022', '22 December 2022']
values = [1,2,3,4,
          1,2,3,4,
          1,2,3,4,
          1,2,3,4,
          1,2,3,4,
          1,2,3,4,
          1,2,3,4,
          1,2,3,4,
          1,2,3,4,
          1,2,3,4]
df = pd.DataFrame(zip(values, dates), columns = ['values', 'dates'])

plt.plot(df['dates'], df['values'])
plt.xticks(rotation=90, size = 20)
plt.show()

這給出了一個丑陋的 plot:

在此處輸入圖像描述

與轉換后的日期 plot 相比,它看起來像這樣:

df['converted_dates'] = pd.to_datetime(df.dates)

plt.plot(df['converted_dates'], df['values'])
plt.xticks(rotation=90, size = 20)
plt.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM