Mengubah warna sumbu, tanda centang dan label untuk plot di matplotlib

Jawaban:

171

Sebagai contoh cepat (menggunakan metode yang sedikit lebih bersih daripada pertanyaan yang berpotensi duplikat):

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(range(10))
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

ax.spines['bottom'].set_color('red')
ax.spines['top'].set_color('red')
ax.xaxis.label.set_color('red')
ax.tick_params(axis='x', colors='red')

plt.show()

teks alt

Joe Kington
sumber
Terima kasih selama ini. ax.tick_params (axis = 'x', colors = 'red') menghasilkan AxesSubplot tidak memiliki atribut kesalahan 'tick_params'. Apa kamu tahu kenapa?
Richard Durr
14
Hmm ... Aneh ... Matplotlib versi berapa yang Anda gunakan? Solusinya adalah melakukan [t.set_color('red') for t in ax.xaxis.get_ticklines()]dan [t.set_color('red') for t in ax.xaxis.get_ticklabels()].
Joe Kington
33

Jika Anda memiliki beberapa gambar atau subplot yang ingin diubah, sebaiknya gunakan pengelola konteks matplotlib untuk mengubah warna, daripada mengubahnya satu per satu. Dengan manajer konteks, Anda dapat mengubah sementara parameter rc hanya untuk kode indentasi berikut ini, tetapi tidak memengaruhi parameter rc global.

Cuplikan ini menghasilkan dua gambar, yang pertama dengan warna yang dimodifikasi untuk sumbu, tanda centang dan label, dan yang kedua dengan parameter rc default.

import matplotlib.pyplot as plt
with plt.rc_context({'axes.edgecolor':'orange', 'xtick.color':'red', 'ytick.color':'green', 'figure.facecolor':'white'}):
    # Temporary rc parameters in effect
    fig, (ax1, ax2) = plt.subplots(1,2)
    ax1.plot(range(10))
    ax2.plot(range(10))
# Back to default rc parameters
fig, ax = plt.subplots()
ax.plot(range(10))

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Anda dapat mengetik plt.rcParamsuntuk melihat semua parameter rc yang tersedia, dan menggunakan pemahaman daftar untuk mencari kata kunci:

# Search for all parameters containing the word 'color'
[(param, value) for param, value in plt.rcParams.items() if 'color' in param]
joelostblom
sumber
0

dimotivasi oleh kontributor sebelumnya, ini adalah contoh tiga sumbu.

import matplotlib.pyplot as plt

x_values1=[1,2,3,4,5]
y_values1=[1,2,2,4,1]

x_values2=[-1000,-800,-600,-400,-200]
y_values2=[10,20,39,40,50]

x_values3=[150,200,250,300,350]
y_values3=[-10,-20,-30,-40,-50]


fig=plt.figure()
ax=fig.add_subplot(111, label="1")
ax2=fig.add_subplot(111, label="2", frame_on=False)
ax3=fig.add_subplot(111, label="3", frame_on=False)

ax.plot(x_values1, y_values1, color="C0")
ax.set_xlabel("x label 1", color="C0")
ax.set_ylabel("y label 1", color="C0")
ax.tick_params(axis='x', colors="C0")
ax.tick_params(axis='y', colors="C0")

ax2.scatter(x_values2, y_values2, color="C1")
ax2.set_xlabel('x label 2', color="C1") 
ax2.xaxis.set_label_position('bottom') # set the position of the second x-axis to bottom
ax2.spines['bottom'].set_position(('outward', 36))
ax2.tick_params(axis='x', colors="C1")
ax2.set_ylabel('y label 2', color="C1")       
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position('right') 
ax2.tick_params(axis='y', colors="C1")

ax3.plot(x_values3, y_values3, color="C2")
ax3.set_xlabel('x label 3', color='C2')
ax3.xaxis.set_label_position('bottom')
ax3.spines['bottom'].set_position(('outward', 72))
ax3.tick_params(axis='x', colors='C2')
ax3.set_ylabel('y label 3', color='C2')
ax3.yaxis.tick_right()
ax3.yaxis.set_label_position('right') 
ax3.spines['right'].set_position(('outward', 36))
ax3.tick_params(axis='y', colors='C2')


plt.show()
kosmos
sumber