เพิ่มป้าย 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-label ได้อย่างง่ายดายในขณะที่รักษาความสามารถในการใช้ colormaps ที่เฉพาะเจาะจงได้อย่างไร ฉันสังเกตเห็นว่าplot()wrapper สำหรับ pandas 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='...)คำตอบให้สูงขึ้นได้เพราะมันอาจจะพลาดกราฟ เป็นวิธีที่รวบรัดที่สุดในการกำหนดแกนทั้งสองซึ่งเป็น usecase ทั่วไป
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-label ด้วยตนเอง (เช่นผ่านทางplt.ylabelที่แสดงในคำตอบอื่น ๆ )


ปัจจุบัน 'การจัดหาอัตโนมัติจาก DataFrame' ไม่ทำงาน ฉันเพิ่งลอง (เวอร์ชัน pandas 0.16.0, matplotlib 1.4.3) และพล็อตสร้างอย่างถูกต้อง แต่ไม่มีป้ายกำกับบนแกน
szeitlin

1
@szeitlin คุณช่วยกรุณายื่นรายงานข้อผิดพลาดในหน้า pandas GitHub ได้หรือไม่? github.com/pydata/pandas/issues
shoyer

คุณรู้อะไรวันนี้อย่างน้อย xlabel กำลังทำงานอยู่ อาจมีบางอย่างที่แปลกเกี่ยวกับ dataframe ที่ฉันใช้เมื่อวานนี้ (?) ถ้าฉันสามารถทำซ้ำฉันจะยื่นมัน!
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 ฉันสงสัยว่าทำไมพวกเขาทั้งหมด (รวมถึงวิธีการตั้งค่าโดยวิธี) ไม่กลับวัตถุพล็อตหรืออย่างน้อยสิ่งที่สืบทอดมาจากมัน
ข้อผิดพลาด

14

สำหรับกรณีที่คุณใช้pandas.DataFrame.hist:

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

โปรดทราบว่าคุณได้รับ ARRAY ของพล็อตมากกว่าพล็อต ดังนั้นในการตั้งค่า x label คุณจะต้องทำสิ่งนี้

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

pandasใช้matplotlibสำหรับแปลงดาต้าเฟรมพื้นฐาน ดังนั้นถ้าคุณใช้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.