팬더 플롯에 x 및 y 레이블 추가


197

팬더를 사용하여 매우 간단한 것을 그리는 다음 코드가 있다고 가정합니다.

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')

산출

특정 컬러 맵을 사용하는 능력을 유지하면서 x 및 y 레이블을 쉽게 설정하는 방법은 무엇입니까? 나는 것으로 나타났습니다 plot()팬더 DataFrames에 대한 래퍼가에 대한 매개 변수의 특정을지지 않습니다.

답변:


329

df.plot()함수는 matplotlib.axes.AxesSubplot객체를 반환 합니다. 해당 객체에 레이블을 설정할 수 있습니다.

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")

여기에 이미지 설명을 입력하십시오

또는 더 간결하게 : ax.set(xlabel="x label", ylabel="y label").

또는 인덱스 x 축 레이블이 인덱스 이름 (있는 경우)으로 자동 설정됩니다. 그래서 df2.index.name = 'x label'작동합니다.


71
x 및 y 레이블을 인수로 추가 할 수없는 특별한 이유가 pd.plot()있습니까? pd.plot()오버 의 추가의 결정을 감안할 때, plt.plot()그것을 호출하는 대신보다 간결하게 만드는 것이 합리적으로 보인다 ax.set_ylabel().
Chrispy

내가 그랬을 때 ax.set_ylabel("y label"), 그것은 오류를 반환합니다 'list' object is not callable. 어떤 생각?
원장 Yu

흥미 롭군 버전 의존적인지 모르겠지만해야 할 것 ax.axes.set_ylabel("y label")입니다.
원장 Yu

2
ax.set(xlabel='...)그래프를 지나면 놓칠 수 있으므로이 답변에 더 높은 점수를 넣을 수 있다고 생각합니다 . 실제로 두 축을 설정하는 가장 간결한 접근 방식이 일반적인 사용 사례입니다.
poulter7

위치는 어떻게 설정합니까?
Odisseo

44

다음과 같이 사용할 수 있습니다.

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()

분명히 문자열 'xlabel'과 'ylabel'을 원하는 것으로 바꾸어야합니다.


또한 그렇지 않으면 두 개의 플롯을 얻으므로 호출은 "이전"플롯을 수정하므로 이전이 아닌 plt.xlabel()이후 df.plot()에 등 을 호출해야합니다 . 같은 일이 간다 plt.title().
Tomasz Gandor

30

DataFrame의 열과 색인에 레이블을 지정하면 팬더가 자동으로 적절한 레이블을 제공합니다.

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')

여기에 이미지 설명을 입력하십시오

이 경우에도 여전히 y- 라벨을 수동으로 제공해야합니다 (예 : plt.ylabel다른 답변에 표시된대로).


현재 'DataFrame의 자동 공급'이 작동하지 않습니다. 방금 시도했지만 (팬더 버전 0.16.0, matplotlib 1.4.3) 플롯이 올바르게 생성되지만 축에 레이블이 없습니다.
szeitlin

1
@ szeitlin pandas github 페이지에 버그 보고서를 제출 하시겠습니까? github.com/pydata/pandas/issues
shoyer

적어도 xlabel이 작동하는 것을 알고 있습니다. 어제 사용했던 데이터 프레임에 이상한 것이있을 수 있습니다 (?). 복제 할 수 있으면 제출하겠습니다!
szeitlin

20

axis.set기능 과 함께 두 레이블을 모두 설정할 수 있습니다. 예를 찾으십시오.

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()

여기에 이미지 설명을 입력하십시오


3
나는 같은 .set(xlabel='x axis', ylabel='y axis')솔루션은 나를 set_xlabel 및 set_ylabel 플롯 방법과는 달리, 한 줄에 모두 넣을 수 있기 때문이다. 왜 그것들이 (set 메소드를 포함하여) 플롯 객체 또는 적어도 그로부터 상속 된 것을 반환하지 않는지 궁금합니다.
내결함성

14

사용하는 경우 pandas.DataFrame.hist:

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

플롯이 아닌 플롯의 ARRAY를 얻습니다. 따라서 x 레이블을 설정하려면 다음과 같이해야합니다

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

10

이건 어떤가요 ...

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

pandasmatplotlib기본 데이터 프레임 플롯에 사용 합니다. 따라서 pandas기본 플롯을 사용하는 경우 플롯 사용자 정의에 matplotlib을 사용할 수 있습니다. 그러나 나는 seaborn기본 수준으로 가지 않고 플롯을 더 많이 사용자 정의 할 수 있는 대체 방법을 제안합니다.matplotlib .

근무 코드 :

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') 

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.