Grafik Batang yang Dikelompokkan Pandas

Saya punya tabel di panda DataFrame bernama df:

+--- -----+------------+-------------+----------+------------+-----------+
|avg_views| avg_orders | max_views   |max_orders| min_views  |min_orders |
+---------+------------+-------------+----------+------------+-----------+
| 23       | 123       |   135       | 500      |    3       |    1      |
+---------+------------+-------------+----------+------------+-----------+ 

Apa yang saya cari sekarang adalah memplot grafik batang yang dikelompokkan yang menunjukkan (rata-rata, maks, min) tampilan dan pesanan dalam satu diagram batang.

yaitu pada sumbu x akan ada Tampilan dan pesanan yang dipisahkan oleh jarak dan 3 batang (rata-rata, maks, min) untuk tampilan dan demikian pula untuk pesanan.

Saya telah melampirkan contoh gambar grafik batang, hanya untuk mengetahui bagaimana tampilan grafik batang.

contoh saja: warna hijau untuk rata-rata, kuning untuk maks dan pin Warna hijau untuk rata-rata, kuning untuk maks, dan merah muda untuk rata-rata.

Saya mengambil kode berikut dari mengatur jarak antara plot batang yang dikelompokkan di matplotlib tetapi itu tidak berhasil untuk saya:

plt.figure(figsize=(13, 7), dpi=300)

groups = [[23, 135, 3], [123, 500, 1]]
group_labels = ['views', 'orders']
num_items = len(group_labels)
ind = np.arange(num_items)
margin = 0.05
width = (1. - 2. * margin) / num_items

s = plt.subplot(1, 1, 1)
for num, vals in enumerate(groups):
    print 'plotting: ', vals
    # The position of the xdata must be calculated for each of the two data 
    # series.
    xdata = ind + margin + (num * width)
    # Removing the "align=center" feature will left align graphs, which is 
    # what this method of calculating positions assumes.
    gene_rects = plt.bar(xdata, vals, width)
s.set_xticks(ind + 0.5)
s.set_xticklabels(group_labels)

merencanakan: [23, 135, 3] ... ValueError: ketidakcocokan bentuk: objek tidak dapat disiarkan ke satu bentuk


person Shubham R    schedule 04.11.2016    source sumber
comment
Dapatkah Anda memberikan contoh minimal yang dapat direproduksi?   -  person IanS    schedule 04.11.2016
comment
@IanS periksa, saya telah menambahkan kodenya   -  person Shubham R    schedule 04.11.2016
comment
Bagaimana tidak berfungsi? Pesan eror?   -  person IanS    schedule 04.11.2016


Jawaban (2)


Menggunakan panda:

import pandas as pd

groups = [[23,135,3], [123,500,1]]
group_labels = ['views', 'orders']

# Convert data to pandas DataFrame.
df = pd.DataFrame(groups, index=group_labels).T

# Plot.
pd.concat(
    [df.mean().rename('average'), df.min().rename('min'), 
     df.max().rename('max')],
    axis=1).plot.bar()

Plot hasil

person IanS    schedule 04.11.2016
comment
bekerja dengan sangat baik! hanya satu pertanyaan, ini hanya memberi saya grafik batang, apakah ada cara untuk meletakkan nilai saya di atas setiap batang. katakan lil di atas bar untuk pesanan maksimal, bisakah saya memberikan nilainya? - person Shubham R; 04.11.2016
comment
Saya khawatir saya tidak tahu bagaimana melakukan itu. Coba jawaban ini mungkin... - person IanS; 04.11.2016
comment
Atau langsung dari dokumentasi (lihat autolabel). - person IanS; 04.11.2016

Anda tidak perlu mengubah kerangka data hanya untuk memplotnya dengan cara tertentu, bukan?

Gunakan seaborn !

import seaborn as sns


sns.catplot(x = "x",       # x variable name
            y = "y",       # y variable name
            hue = "type",  # group variable name
            data = df,     # dataframe to plot
            kind = "bar")

sumber

person Thomas G.    schedule 03.04.2020