我在 Python 中完成了以下時間線圖。其中資料按日期時間索引采用季度格式。但是,我需要將圖表翻譯成我的本地語言,因此將“Q1”、“Q2”、“Q3”、“Q4”替換為“kv1”、“kv2”、“kv3”、“kv4”。這可能嗎?所以我需要 x 軸是 kv3, kv4, kv1 2022, kv2 而不是 Q3, Q4, Q1 2022, Q2 等等。

import random
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
import pandas
plt.style.use('seaborn-whitegrid')
matplotlib.rcParams['font.sans-serif'] = "Arial"
matplotlib.rcParams['font.family'] = "Arial"
categories = ['Car','Train','Boat', 'Plane', 'Walk' ]
cat_dict = dict(zip(categories, range(1, len(categories) 1)))
val_dict = dict(zip(range(1, len(categories) 1), categories))
dates = pandas.DatetimeIndex(freq='Q', start='2021-09-30', end='2023-12-31')
values = [random.choice(categories) for _ in range(len(dates))]
df = pandas.DataFrame(data=values, index=dates, columns=['category'])
df['plotval'] = [float('NaN'),1,1,3,1,float('NaN'),5,2,1,float('NaN')]
df['plotval'][0] = np.nan
plt.rcParams["figure.figsize"] = 4,3.5
plt.figure(dpi=1000)
fig, ax = plt.subplots()
df['plotval'].plot(ax=ax, style='^',color='darkblue', label = "Renteheving", markersize=12)
ax.margins(0.2)
ax.spines['top'].set_visible(False)
ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, pos: val_dict.get(x)))
plt.yticks( weight = 'bold')
我試著添加
plt.xlabel(["kv1", "kv2", "kv3", "kv4"])
這給了我

幫助一如既往地受到高度贊賞。
uj5u.com熱心網友回復:
嘗試將其添加到您的代碼中:
# Call draw to populate tick labels
plt.draw()
# Change major labels
new_major_labels = []
for label in ax.get_xticklabels(minor=False):
s = label.get_text()
label.set_text(s.replace('Q', 'kv'))
new_major_labels.append(label)
ax.set_xticklabels(new_major_labels, minor=False)
# Change minor labels
new_minor_labels = []
for label in ax.get_xticklabels(minor=True):
s = label.get_text()
label.set_text(s.replace('Q', 'kv'))
new_minor_labels.append(label)
ax.set_xticklabels(new_minor_labels, minor=True)
它拋出了一個我不明白的警告,但我認為它可以滿足您的需求。
uj5u.com熱心網友回復:
我無法測驗它,因為我無法重現您的圖表,但這應該有效:
D = {'Q1':'kv1', 'Q2':'kv2', 'Q3':'kv3', 'Q4':'kv4'} # define a dictionnary to replace labels
labels = [i.get_text() for i in ax.get_xticklabels()] # get former labels
labels = [i if i not in D.keys() else D[i] for i in labels] # replace it if in dictionnary
ax.set_xticklabels(labels) # apply the new labels
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350089.html
標籤:Python 熊猫 matplotlib
