亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

軸刻度日期格式化程序在折線圖上無法正常工作?

軸刻度日期格式化程序在折線圖上無法正常工作?

qq_遁去的一_1 2022-07-19 20:12:34
我可以使用我的繪圖數據來呈現折線圖,但 x 軸代碼顯示不正確。因為我的數據框有period datetimeindex對象,我想正確地沿 x 軸顯示它們。我嘗試了幾個現有的帖子,axis ticker但仍然沒有正確的情節。如何解決這個問題?任何想法?謝謝EDA 數據這是關于 gist 的繪圖數據我的嘗試:這是我目前的嘗試:import pandas as pdimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesdf = pd.read_csv('plot_data.csv', encoding='utf-8')df.div(df.Total, axis=0).applymap(lambda x: f'{x * 100:.2f}%')fig, ax1 = plt.subplots(figsize=(14,6))_ = df.div(df.Total, axis=0).iloc[:, :-1].plot(kind='line', ax=ax1, ax=ax1, marker='o',ls='--')ax1.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y))) ax1.xaxis.set_major_locator(mdates.DayLocator())ax1.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d-%Y'))plt.show()目標我想渲染一個折線圖,其中 y 軸應該顯示百分比,而 x 軸應該正確顯示年份的周期。在我的代碼中,x 軸代碼顯示不正確。任何想法?
查看完整描述

2 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

最簡單的就是讓熊貓做它的事。為了在 x 軸上顯示日期,pandas 喜歡將這些日期作為索引。做吧df.set_index('quarter', inplace=True)。


有了這樣的索引,pandas 將設置一個看起來像日期的 x 軸,但實際上是一個分類軸(編號為 0、1、2、3、...),其中 pandas 提供了刻度標簽。


要設置百分比,請使用PercentFormatter, 和參數設置 100%(為 1,而不是默認的 100)和小數位數。


import pandas as pd

import matplotlib.pyplot as plt

import matplotlib.dates as mdates

import matplotlib.ticker as mtick


filename = 'plot_data.csv'

df = pd.read_csv(filename, encoding='utf-8')

df.set_index('quarter', inplace=True)

fig, ax1 = plt.subplots(figsize=(14, 6))

df.div(df.Total, axis=0).iloc[:, :-1].plot(kind='line', ax=ax1, marker='o', ls='--')

ax1.yaxis.set_major_formatter(mtick.PercentFormatter(xmax=1, decimals=0))

plt.xticks(range(len(df.index)), df.index, rotation=90)

plt.show()

http://img1.sycdn.imooc.com//62d69fe6000198f315991010.jpg

或者,您可以將索引轉換為 matplotlib 日期并使用 matplotlib 的格式和定位器:


import pandas as pd

import matplotlib.pyplot as plt

import matplotlib.dates as mdates

import matplotlib.ticker as mtick


filename = 'plot_data.csv'

df = pd.read_csv(filename, encoding='utf-8')

df.quarter = [pd.to_datetime(d).date() for d in df.quarter]

df.set_index('quarter', inplace=True)

fig, ax1 = plt.subplots(figsize=(14, 6))

_ = df.div(df.Total, axis=0).iloc[:, :-1].plot(kind='line', ax=ax1, marker='o', ls='--')

ax1.yaxis.set_major_formatter(mtick.PercentFormatter(xmax=1, decimals=0))

ax1.xaxis.set_major_locator(mdates.MonthLocator(bymonthday=1, interval=3))

ax1.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d-%Y'))

plt.xticks(rotation=45)

plt.tight_layout()

plt.show()

http://img1.sycdn.imooc.com//62d69ff200019f5917660885.jpg

查看完整回答
反對 回復 2022-07-19
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

該quarter列被轉換為datetime格式,然后設置為索引:


import matplotlib.dates as mdates


df = pd.read_csv('plot_data.csv', encoding='utf-8')

df['quarter'] = pd.to_datetime(df['quarter'], format='%Y-%m-%d')

df = df.set_index(df['quarter'])

df = df.sort_index()

fig, ax1 = plt.subplots(figsize=(14,6))

_ = df.drop('quarter', axis=1).div(df.Total, axis=0).iloc[:, :-1].plot(kind='line', ax=ax1)

ax1.yaxis.set_major_formatter(plt.FuncFormatter(lambda y, _: '{:.0%}'.format(y))) 

ax1.set_xticks(df.index)

ax1.xaxis_date()

plt.show()

http://img1.sycdn.imooc.com//62d69fff000150c908910384.jpg

在與 matplotlib 斗爭之后,我找到了使用 seaborn 的解決方案。


import matplotlib.ticker as mtick

import seaborn as sns

sns.set()

df = pd.read_csv('plot_data.csv', encoding='utf-8')

df['quarter'] = pd.to_datetime(df['quarter'], format='%Y-%m-%d')

df = df.set_index(df['quarter'])

df = df.sort_index()

df_clean = df.drop('quarter', axis=1).div(df.Total, axis=0)

df_clean.drop('Total', axis=1, inplace=True)

df_us = df_clean.unstack().reset_index().copy()

df_us = df_us.rename(columns={'level_0':'Country', 0:'Percent'})

g = sns.lineplot(data=df_us, x='quarter', y='Percent', hue='Country')

g.set(xticks=df.index)

plt.xticks(rotation=30)

g.yaxis.set_major_formatter(plt.FuncFormatter(lambda y, _: '{:.0%}'.format(y)))

plt.savefig('sns.png')

plt.show()

http://img1.sycdn.imooc.com//62d6a00b00016feb04030289.jpg

查看完整回答
反對 回復 2022-07-19
  • 2 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號