Я создаю несколько гистограмм для всех столбцов в моем df, но я хотел бы добавить несколько точек вверх по полосе, исходное изображение, которое я генерирую с помощью своего кода (в конце поста), это:
И это то, что я хочу:
Возможно ли это сделать с помощью Python? предложения или помощь с кодом, пожалуйста
for i in df.columns:
#print(i)
ii= df[i].value_counts()
#dfclean[i].value_counts().plot(kind = "bar", figsize=(15,7), color = "#61d199", title=i)
fig, ax = plt.subplots(figsize=(15,7))
myList = ii.items()
myList = sorted(myList) # or myList for not sorted by results
x, y = zip(*myList)
for index in range(len(x)):
ax.text(x[index], y[index], y[index], size=13)
#plt.bar(x, y, color=('black', 'red', 'green', 'blue', 'cyan'))
#plt.bar(x, y, color=('#22314A'))
plt.bar(x, y, color=('#22314A', '#E35855', '#1293C4', '#FFFFFF', '#CFAB2B', '#008080', '#AE0E36'))
#plt.bar(x, y, color=('#22314A', '#E35855', '#1293C4', '#FFFFFF', '#CFAB2B'), width=0.1)# Modify width
plt.xlabel("Answers", fontsize=20)
plt.ylabel('No. answers', fontsize=20)
plt.title(i, fontsize=20)
plt.xticks(rotation=45, fontsize=16)#change rotation
plt.yticks(fontsize=16)#change rotation
i = i.replace(" ", "_")
i = i.replace("[", "_")
i = i.replace("]", "_")
i = i.replace("?", "_")
i = i.replace("/", "_")
i = i.replace(".", "_")
i = i.replace(":", "_")
#print(i)
plt.style.use('seaborn')
plt.savefig(f'{i}.png', bbox_inches='tight')






Чтобы добавить эллипс на график, используйте Artist. Смотрите ссылку для получения дополнительной информации. На основе образца графика в справочнике подготавливаются цвет заливки и цвет края, а также добавляются аннотации и эллипсы в циклическом процессе.
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig, ax = plt.subplots()
fruits = ['apple', 'blueberry', 'cherry', 'orange']
counts = [40, 100, 30, 55]
bar_labels = ['black', 'red', 'blue', 'sand']
bar_colors = ['#22314A', '#E35855', '#1293C4', '#CFAB2B']
edge_color = ['#22314A', '#E35855', '#1293C4', 'black']
rects1 = ax.bar(fruits, counts, label=bar_labels, color=bar_colors)
ax.set_ylabel('fruit supply')
ax.set_title('Fruit supply by kind and color')
ax.legend(title='Fruit color')
ax.bar_label(rects1, padding=2)
for s in ['top','bottom','right','left']:
ax.spines[s].set_visible(False)
ax.set_xlabel("Answers", fontsize=20)
ax.set_ylabel('No. answers', fontsize=20)
ax.set_title('Action', fontsize=20)
ax.set_ylim([0,130])
plt.xticks(rotation=45, fontsize=16)
plt.yticks(fontsize=16)
offset = 15
for i,(cnt,c,e) in enumerate(zip(counts,bar_colors, edge_color)):
e = patches.Ellipse(xy=(i, cnt+offset), width=0.4, height=15, fc=c, ec=e)
ax.text(i, cnt+offset, str(cnt), color='white', ha='center', va='center')
ax.add_patch(e)
plt.style.use('seaborn-v0_8')
plt.show()
Однако я могу справиться с этим, обновив matplotlib Colab. !pip install -U matplotlib Страдаете ли вы от каких-либо других ограничений, причина, по которой я расширяю ограничение по оси Y, заключается в отображении эллипсов. ax.set_ylim([0,130])
Я пытался обновить, но последняя версия, которая обновляется, — 3.2.2. Да, я знаю о лимите, но есть другой способ получить наибольшее число, чтобы использовать его в качестве лимита?
Я обновился с помощью Colab, и теперь это matplotlib: 3.5.3. Вы перезапустили среду выполнения?
Чтобы выполнить обновление по версии, попробуйте следующее. !pip install -U matplotlib==3.5.3
Как я могу перезапустить среду выполнения?
Внизу журнала есть кнопка RESTART RUNTIME, нажмите на нее и нажмите ОК.
Привет, на самом деле это здорово, спасибо, но мне пришлось изменить некоторые строки, потому что я использую Colab и не могу использовать .bar_label, который является недавним для matplotlib 3.4.2, еще не доступным в colab. Но мне нужна помощь с: «ax.set_ylim([0,130])», как я могу сделать это автоматически в зависимости от самой высокой метки для каждого столбца?