python - 如何更改 Matplotlib 条形图 x 轴标签上显示的单位
问题描述
我正在努力做到这一点,因此 x 轴上的收入刻度显示价值是一百万的因子,而不是现在的一亿因子。我似乎无法弄清楚如何做到这一点。我的代码和生成的条形图如下。
import numpy as np
import pandas as pd
import matplotlib.ticker as plticker
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import display
from pandas import Series
%matplotlib inline
# Define Figure Size
fig, ax = plt.subplots(figsize=(25,25))
# Get the average vote_average for each genre
average_revenue = df2.groupby('release_year')['revenue_adj'].mean()
# Find positions of y ticks
y_pos = np.arange(len(df2['release_year'].unique()))
# Set up Bar Chart
ax.set_yticks(y_pos)
ax.set_yticklabels(sorted(df2['release_year'].unique()))
ax.set_xlabel('Revenue in Millions', fontsize=16)
ax.set_ylabel('Release Year', fontsize=16)
ax.set_title('Revenue by Release Year', fontsize=20)
# Set Size of X and Y labels
plt.rc('xtick', labelsize=14)
plt.rc('ytick', labelsize=14)
# Put Values next to Each Bar
for i, v in enumerate(average_revenue):
a = v/1000000
ax.text(v, i, ('$' + str(round(a,2)) + 'M'), color='blue')
ax.invert_yaxis() # labels read top-to-bottom
# Draw Bar Chart
ax.barh(y_pos, average_revenue, align='center', color='green', ecolor='black')
解决方案
现在,数据以个数显示,而不是数百万或数亿。注意1e8
情节右侧的 。您可以通过将输入除以一百万来绘制以百万为单位的值:
ax.barh(y_pos, average_revenue * 1e-6, ...)
或者,如果您不想更改数据,可以调整 x 轴上的格式化程序。例如,您可以使用FuncFormatter
这样的:
from matplotlib.ticker import FuncFormatter
ax.xaxis.set_major_formatter(FuncFormatter(lambda x, pos: f'{x * 1e-6:0.1f}'))
推荐阅读
- c# - 将生成对象移动到随机位置
- excel - 基于独特规则组合的高级查找公式
- java - OrientDB 3.0.4 Java OValidationException:该字段已声明为 EMBEDDEDLIST 但使用了不兼容的类型
- android - Custom setter in Kotlin
- c - 功能结构 - 差异
- hibernate - 线程“主”java.lang.IncompatibleClassChangeError 中的异常:类 org.hibernate.ejb.HibernatePersistence
- c# - 删除/忽略 HTTP 请求上的 ServicePointManager.SecurityProtocol
- sql - Insert into SQL Server has failed due to invalid data length error
- html - 着陆页在移动设备上显示为堆叠
- firebase - Firebase Storage image does not upload properly