繪製每個第 n 個日期 xaxis 的問題

哈維爾

我有一個這樣的 df:

     level_0      DATE        ONI  positive  YEAR
686      sst 1960-03-15 -0.364453     False  1960
687      sst 1960-04-15 -0.366851     False  1960
688      sst 1960-05-15 -0.321550     False  1960
689      sst 1960-06-15 -0.382227     False  1960
690      sst 1960-07-15 -0.374074     False  1960
     ...        ...       ...       ...   ...
1363     sst 2016-08-15 -0.597598     False  2016
1364     sst 2016-09-15 -0.784883     False  2016
1365     sst 2016-10-15 -0.900240     False  2016
1366     sst 2016-11-15 -1.006226     False  2016
1367     sst 2016-12-15 -1.065392     False  2016

[682 rows x 5 columns]

我想每 n 年用 xaxis 繪製我的數據,所以我做了這個代碼:

fig = plt.figure('ONI', figsize=(15,20), dpi=200)
ax = fig.add_axes([0.15,0.15,0.7,0.7])


df_oni.plot(x='DATE',y="ONI",kind='bar', alpha=0.5, color=df_oni.positive.map({True: 'r', False: 'b'}),ax=ax)


date_form = DateFormatter("%Y")
ax.xaxis.set_major_formatter(date_form)
ax.xaxis.set_major_locator(mdates.YearLocator(base=5))

ax.xaxis.set_tick_params(rotation=0)

ax.set_title("Indice ONI",fontsize= 14,fontweight="bold")
# Define the date format

ax.set_ylabel("Valor del Índice\n", fontsize = 10.0)
ax.yaxis.set_major_locator(MaxNLocator(integer=True, min_n_ticks=1))

ax.set_xlabel("")

我不明白為什麼即使ax.xaxis.set_major_locator(mdates.YearLocator(base=5))我在 xaxis 中僅使用 1 年就得到了這個數字:

你介意幫我嗎?提前致謝。

在此處輸入圖片說明

斯特夫

這與pandas生成bar繪圖的方式有關,它只是索引 x 位置(驗證:ax.get_xlim()給出(-0.5, 681.5))。

最簡單的解決方法是直接使用 matplotlib:

ax.bar(df_oni.DATE,df_oni.ONI, width=20, alpha=0.5, color=df_oni.positive.map({True: 'r', False: 'b'}))

(您需要將條寬增加到 20 以獲得更好的視覺印象)

例子:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.ticker as mticker

fig = plt.figure('ONI', figsize=(15,20), dpi=200)
ax = fig.add_axes([0.15,0.15,0.7,0.7])

df_oni = pd.DataFrame({'DATE': pd.date_range('1960-03', periods=682, freq='M'),
                       'ONI': (np.random.rand(682) - .5)*5})
df_oni['positive'] = df_oni.ONI>0

ax.bar(df_oni.DATE,df_oni.ONI, width=20, alpha=0.5, color=df_oni.positive.map({True: 'r', False: 'b'}))

ax.xaxis.set_major_locator(mdates.YearLocator(base=5))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y"))
ax.xaxis.set_tick_params(rotation=0)

ax.yaxis.set_major_locator(mticker.MaxNLocator(integer=True, min_n_ticks=1))

ax.set_title("Indice ONI",fontsize= 14,fontweight="bold")
ax.set_ylabel("Valor del Índice\n", fontsize = 10.0)
ax.set_xlabel("")

在此處輸入圖片說明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

關於在 R 中繪製兩個尺度虛擬刻面圖的問題

在 C 中使用字符串的每個第 k 位循環問題

這個java日期格式化程序有什麼問題?

關於 Python/Numpy 日期時間的另一個問題

面臨將相關事件的顏色點放在單個日期上的問題

如何迭代每第 n 個元素的 4D 矩陣的第一個索引?

如何使用基數 R 綁定列表的每個第 n 個元素?

如何將向量中的每個第 n 個元素與其相鄰值相加?

網頁抓取問題:無法刪除\n個字符

如何在每個藍色對象周圍繪製矩形?

Flutter: AnimationController vsync 這個問題

JavaScript 這個問題與 SetInterval

PHP 問題:高速公路的第 8 和第 9 個入口不起作用

循環遍歷 bashscript 中的文件名 - 需要在每個循環第 n 次迭代中更新文件中的一行文本,使用 n+1 但循環序列會導致問題

高图表-xAxis日期

每個字符串每出現第 2 次,用文件的第 n 行替換兩個不同的字符串

每第 n 行輸出一個單元格

在單個鏈中獲得最大日期 - n 年

在 for 循環中製作 python 圖,為每個圖提供不同的標題

在一個圖上繪製多個圖

Matlab:繪製數組,使每個值具有隨機形狀和顏色圖

在 R 中的 facet wraps 中繪製每個組的平均數據(顯示 geom_smooth)

當我在 x 軸上繪製有很多日期的散點圖時出現問題

如何解決邏輯表達式問題中的這個問題?

我如何解決這個 javascript titlecase 問題?

`mutate()` 的問題......使用的第一個元素

如何在 Haskell 中解決這個問題?

sql 左連接多個同表問題

我該如何解決這個 colspan 問題?