Добавление точек на панель диаграммы с помощью matplot

Я создаю несколько гистограмм для всех столбцов в моем 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')
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы добавить эллипс на график, используйте 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()

Привет, на самом деле это здорово, спасибо, но мне пришлось изменить некоторые строки, потому что я использую Colab и не могу использовать .bar_label, который является недавним для matplotlib 3.4.2, еще не доступным в colab. Но мне нужна помощь с: «ax.set_ylim([0,130])», как я могу сделать это автоматически в зависимости от самой высокой метки для каждого столбца?

Eduardomaker 08.10.2022 04:36

Однако я могу справиться с этим, обновив matplotlib Colab. !pip install -U matplotlib Страдаете ли вы от каких-либо других ограничений, причина, по которой я расширяю ограничение по оси Y, заключается в отображении эллипсов. ax.set_ylim([0,130])

r-beginners 08.10.2022 04:54

Я пытался обновить, но последняя версия, которая обновляется, — 3.2.2. Да, я знаю о лимите, но есть другой способ получить наибольшее число, чтобы использовать его в качестве лимита?

Eduardomaker 08.10.2022 05:07

Я обновился с помощью Colab, и теперь это matplotlib: 3.5.3. Вы перезапустили среду выполнения?

r-beginners 08.10.2022 05:15

Чтобы выполнить обновление по версии, попробуйте следующее. !pip install -U matplotlib==3.5.3

r-beginners 08.10.2022 05:19

Как я могу перезапустить среду выполнения?

Eduardomaker 08.10.2022 05:19

Внизу журнала есть кнопка RESTART RUNTIME, нажмите на нее и нажмите ОК.

r-beginners 08.10.2022 05:50

Другие вопросы по теме