Как изменить единицы измерения, показанные на метках оси x на гистограмме Matplotlib

#python #pandas #numpy #matplotlib #bar-chart

Вопрос:

Я пытаюсь сделать так, чтобы галочки на оси 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, ('

Гистограмма Python


Ответ №1:

Прямо сейчас данные отображаются в единицах, а не в миллионах или сотнях миллионов. Обратите 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}'))
 

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')
Гистограмма Python

Ответ №1:

Прямо сейчас данные отображаются в единицах, а не в миллионах или сотнях миллионов. Обратите 1e8 внимание на справа от участка. Вы можете построить значение в миллионах, разделив входные данные на миллион:


Кроме того, вы можете настроить форматирование по оси x, если предпочитаете не изменять данные. Например, вы могли бы использовать FuncFormatter такой: