Panda grafiğine x ve y etiketleri ekleme


197

Pandaları kullanarak çok basit bir şey çizen aşağıdaki kodu olduğunu varsayalım:

import pandas as pd
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10, 
         title='Video streaming dropout by category')

Çıktı

Belirli renk haritalarını kullanma yeteneğimi korurken x ve y etiketlerini nasıl kolayca ayarlayabilirim? plot()Panda DataFrames için sarıcı bunun için herhangi bir parametre almadığını fark ettim .

Yanıtlar:


329

df.plot()İşlev bir döner matplotlib.axes.AxesSubplotnesne. Bu nesne üzerindeki etiketleri ayarlayabilirsiniz.

ax = df2.plot(lw=2, colormap='jet', marker='.', markersize=10, title='Video streaming dropout by category')
ax.set_xlabel("x label")
ax.set_ylabel("y label")

resim açıklamasını buraya girin

Ya da, daha özlü: ax.set(xlabel="x label", ylabel="y label").

Alternatif olarak, dizin x ekseni etiketi, varsa otomatik olarak Dizin adına ayarlanır. bu yüzden df2.index.name = 'x label'de işe yarar.


71
x ve y etiketlerinin bağımsız değişken olarak eklenememesinin belirli bir nedeni var pd.plot()mı? pd.plot()Üzerindeki ek kısaltma göz önüne alındığında, plt.plot()aramak yerine daha da özlü hale getirmek mantıklı görünmektedir ax.set_ylabel().
Chrispy

Yaptığımda ax.set_ylabel("y label")bir hata döndürüyor 'list' object is not callable. Herhangi bir fikir?
Defter Yu

İlginç. Sürüme bağlı olup olmadığını bilmiyorum ama yapmam gerekecek ax.axes.set_ylabel("y label").
Ledger Yu

2
Sanırım ax.set(xlabel='...)bu cevabı daha yükseğe koyabilirsiniz, çünkü grafiği geçebilir . Ortak kullanım alanı olan her iki ekseni ayarlamak gerçekten de en özlü yaklaşımdır.
poulter7

Konumu nasıl ayarlıyorsunuz?
Odisseo

44

Bunu şu şekilde kullanabilirsiniz:

import matplotlib.pyplot as plt 
import pandas as pd

plt.figure()
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10,
         title='Video streaming dropout by category')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.show()

Açıkçası 'xlabel' ve 'ylabel' dizelerini olmasını istediğiniz dizelerle değiştirmeniz gerekir.


Ayrıca , daha önce değil plt.xlabel()sonra çağırmanız gerekir df.plot(), aksi takdirde iki parsel alırsınız - çağrılar "önceki" bir arsa değiştirir. Aynı şey için de geçerli plt.title().
Tomasz Gandor

30

DataFrame'inizin sütunlarını ve dizinini etiketlerseniz, pandalar otomatik olarak uygun etiketleri sağlar:

import pandas as pd
values = [[1, 2], [2, 5]]
df = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                  index=['Index 1', 'Index 2'])
df.columns.name = 'Type'
df.index.name = 'Index'
df.plot(lw=2, colormap='jet', marker='.', markersize=10, 
        title='Video streaming dropout by category')

resim açıklamasını buraya girin

Bu durumda, yine de y-etiketlerini manuel olarak sağlamanız gerekir (örneğin, plt.ylabeldiğer yanıtlarda gösterildiği gibi yoluyla ).


şu anda, bu 'DataFrame'den otomatik besleme' çalışmıyor. Ben sadece denedim (pandalar sürüm 0.16.0, matplotlib 1.4.3) ve arsa doğru üretiyor, ancak eksenlerde etiket yok.
szeitlin

1
@szeitlin panda github sayfasında bir hata raporu dosyalayabilir misiniz? github.com/pydata/pandas/issues
shoyer

biliyor musunuz, bugün en azından xlabel çalışıyor. belki de dün kullandığım veri çerçevesinde garip bir şeyler vardı (?). eğer yeniden üretebilirsem, dosyalayacağım!
szeitlin

20

Her iki etiketi axis.setişlevle birlikte ayarlamak mümkündür . Örneği arayın:

import pandas as pd
import matplotlib.pyplot as plt
values = [[1,2], [2,5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])
ax = df2.plot(lw=2,colormap='jet',marker='.',markersize=10,title='Video streaming dropout by category')
# set labels for both axes
ax.set(xlabel='x axis', ylabel='y axis')
plt.show()

resim açıklamasını buraya girin


3
.set(xlabel='x axis', ylabel='y axis')Çözümü seviyorum çünkü set_xlabel ve set_ylabel çizim yöntemlerinin aksine hepsini tek bir satıra koymamı sağlıyor. Neden hepsi (set yöntemi dahil, bu arada) arsa nesnesini veya en azından ondan miras bir şey döndürmüyor merak ediyorum.
hataya dayanıklı

14

Kullandığınız durumlar için pandas.DataFrame.hist:

plt = df.Column_A.hist(bins=10)

Bir komplodan ziyade bir dizi ARRAY aldığınızı unutmayın. Bu nedenle x etiketini ayarlamak için böyle bir şey yapmanız gerekir

plt[0][0].set_xlabel("column A")

10

ne dersin ...

import pandas as pd
import matplotlib.pyplot as plt

values = [[1,2], [2,5]]

df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])

(df2.plot(lw=2,
          colormap='jet',
          marker='.',
          markersize=10,
          title='Video streaming dropout by category')
    .set(xlabel='x axis',
         ylabel='y axis'))

plt.show()

2

pandasmatplotlibtemel veri çerçevesi grafikleri için kullanır . Yani, pandastemel çizim için kullanıyorsanız, çizim özelleştirme için matplotlib kullanabilirsiniz. Ancak, burada seaborntemel seviyeye girerken arsanın daha fazla özelleştirilmesini sağlayan alternatif bir yöntem öneriyorum matplotlib.

Çalışma Kodu:

import pandas as pd
import seaborn as sns
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
ax= sns.lineplot(data=df2, markers= True)
ax.set(xlabel='xlabel', ylabel='ylabel', title='Video streaming dropout by category') 

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.