Уровень изменения порядка Python в фрейме данных для пошагового графика

#python #dataframe #matplotlib

#python #фрейм данных #matplotlib

Вопрос:

Я построил пошаговый график, и порядок тиков y — это не то, что я хочу. Как я могу изменить их порядок?

Вот коды:

 import numpy as np
import matplotlib.pyplot as plt
df = {'col1': [1, 2, 3, 4,5,6], 'col2': ['a', 'a', 'b', 'c', 'a','b']}
dat = pd.DataFrame(data = df)
plt.step(dat['col1'], dat['col2'])
plt.show()
  

Это график, который я получил:

введите описание изображения здесь

Но я хочу, чтобы порядок тика y был [b, c, a], а не [a, b, c] . Как я могу это сделать?

Спасибо,

LT

Комментарии:

1. Извините, вы хотите тот же график, но с другим порядком y-тиков или упорядочить ваши данные в соответствии с желаемым порядком? Если это так, не изменит ли это существенно, как будет выглядеть график? Если да, можете ли вы показать, как должен выглядеть желаемый график

2. @EdChum Привет, я хочу изменить их порядок, поэтому график, предоставленный mrzo и ImportanceOfBeingErnest, — это то, что я хотел.

Ответ №1:

К сожалению, matplotlib в настоящее время не позволяет предопределять порядок категорий на оси. Однако один из вариантов — сначала отобразить что-то в правильном порядке по осям, а затем удалить это. Это исправит порядок для последующего реального построения графика.

 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

order = list("bca")

dic = {'col1': [1, 2, 3, 4,5,6], 'col2': ['a', 'a', 'b', 'c', 'a','b']}
df = pd.DataFrame(dic)

sentinel, = plt.plot(np.repeat(df.col1.values[0], len(order)), order)
sentinel.remove()

plt.step(df['col1'], df['col2'])
plt.show()
  

введите описание изображения здесь

Ответ №2:

Вы можете использовать смесь pd.Series в качестве картографа и ax.set_yticks:

 import numpy as np
import matplotlib.pyplot as plt
df = {'col1': [1, 2, 3, 4,5,6], 'col2': ['a', 'a', 'b', 'c', 'a','b']}
dat = pd.DataFrame(data = df)

# Create a mapper from character to rank with the desired order:
order = ['b', 'c', 'a']
rank = pd.Series(range(len(order)), index=order)

fig, ax = plt.subplots()
ax.step(dat['col1'], rank.loc[dat['col2']])
ax.set_yticks(rank.values);
ax.set_yticklabels(rank.index)
  

введите описание изображения здесь