matplotlib 如何更改图的轴、刻度和标签的颜色

pvabu6sv  于 2023-02-13  发布在  其他
关注(0)|答案(6)|浏览(345)

我想更改坐标轴的颜色,以及我使用matplotlib和PyQt绘制的图的刻度和值标签。
有什么想法吗?

wxclj1h5

wxclj1h51#

举一个简单的例子(使用比潜在重复问题稍微简洁的方法):

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

或者

[t.set_color('red') for t in ax.xaxis.get_ticklines()]
[t.set_color('red') for t in ax.xaxis.get_ticklabels()]
tktrz96b

tktrz96b2#

如果您有多个图形或子图要修改,使用matplotlib上下文管理器来更改颜色会很有帮助,而不是单独更改每个图形或子图。上下文管理器允许您临时更改紧随其后的缩进代码的rc参数,但不会影响全局rc参数。
这个代码片段生成两个图形,第一个图形修改了轴、刻度和刻度标签的颜色,第二个图形使用默认rc参数。

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

您可以输入plt.rcParams来查看所有可用的rc参数,并使用列表解析来搜索关键字:

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

xuo3flqw3#

  • 对于使用pandas.DataFrame.plot()的用户,从 Dataframe 创建绘图时返回matplotlib.axes.Axes。因此, Dataframe 绘图可分配给变量ax,从而启用相关格式化方法的使用。
  • pandas的默认打印后端为matplotlib
  • 参见matplotlib.spines
      • python 3.10pandas 1.4.2matplotlib 3.5.1seaborn 0.11.2中进行测试**
import pandas as pd

# test dataframe
data = {'a': range(20), 'date': pd.bdate_range('2021-01-09', freq='D', periods=20)}
df = pd.DataFrame(data)

# plot the dataframe and assign the returned axes
ax = df.plot(x='date', color='green', ylabel='values', xlabel='date', figsize=(8, 6))

# set various colors
ax.spines['bottom'].set_color('blue')
ax.spines['top'].set_color('red') 
ax.spines['right'].set_color('magenta')
ax.spines['right'].set_linewidth(3)
ax.spines['left'].set_color('orange')
ax.spines['left'].set_lw(3)
ax.xaxis.label.set_color('purple')
ax.yaxis.label.set_color('silver')
ax.tick_params(colors='red', which='both')  # 'both' refers to minor and major axes

海运轴级图

import seaborn as sns

# plot the dataframe and assign the returned axes
fig, ax = plt.subplots(figsize=(12, 5))
g = sns.lineplot(data=df, x='date', y='a', color='g', label='a', ax=ax)

# set the margines to 0
ax.margins(x=0, y=0)

# set various colors
ax.spines['bottom'].set_color('blue')
ax.spines['top'].set_color('red') 
ax.spines['right'].set_color('magenta')
ax.spines['right'].set_linewidth(3)
ax.spines['left'].set_color('orange')
ax.spines['left'].set_lw(3)
ax.xaxis.label.set_color('purple')
ax.yaxis.label.set_color('silver')
ax.tick_params(colors='red', which='both')  # 'both' refers to minor and major axes

海运数字级图

# plot the dataframe and assign the returned axes
g = sns.relplot(kind='line', data=df, x='date', y='a', color='g', aspect=2)

# iterate through each axes
for ax in g.axes.flat:

    # set the margins to 0
    ax.margins(x=0, y=0)
    
    # make the top and right spines visible
    ax.spines[['top', 'right']].set_visible(True)

    # set various colors
    ax.spines['bottom'].set_color('blue')
    ax.spines['top'].set_color('red') 
    ax.spines['right'].set_color('magenta')
    ax.spines['right'].set_linewidth(3)
    ax.spines['left'].set_color('orange')
    ax.spines['left'].set_lw(3)
    ax.xaxis.label.set_color('purple')
    ax.yaxis.label.set_color('silver')
    ax.tick_params(colors='red', which='both')  # 'both' refers to minor and major axes

yzuktlbb

yzuktlbb4#

受以前撰稿人的启发,这是一个三轴的例子。

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

mctunoxg5#

您还可以使用此功能在同一图形中绘制多个图,并使用相同的调色板设置它们的样式。
下面给出了一个示例

fig = plt.figure()
# Plot ROC curves
plotfigure(lambda: plt.plot(fpr1, tpr1, linestyle='--',color='orange', label='Logistic Regression'), fig)
plotfigure(lambda: plt.plot(fpr2, tpr2, linestyle='--',color='green', label='KNN'), fig)
plotfigure(lambda: plt.plot(p_fpr, p_tpr, linestyle='-', color='blue'), fig)
# Title
plt.title('ROC curve')
# X label
plt.xlabel('False Positive Rate')
# Y label
plt.ylabel('True Positive rate')

plt.legend(loc='best',labelcolor='white')
plt.savefig('ROC',dpi=300)

plt.show();

输出:

px9o7tmv

px9o7tmv6#

下面是一个实用函数,它接受一个带有必要参数的绘图函数,并用所需的背景色样式绘制图形。您可以根据需要添加更多参数。

def plotfigure(plot_fn, fig, background_col = 'xkcd:black', face_col = (0.06,0.06,0.06)):
"""
Plot Figure using plt plot functions.

Customize different background and face-colors of the plot.

Parameters:
plot_fn (func): The plot functions with necessary arguments as a lamdda function.
fig : The Figure object by plt.figure()
background_col: The background color of the plot. Supports matlplotlib colors
face_col: The face color of the plot. Supports matlplotlib colors

Returns:
void 

"""
fig.patch.set_facecolor(background_col)
plot_fn()
ax = plt.gca()
ax.set_facecolor(face_col)
ax.spines['bottom'].set_color('white')
ax.spines['top'].set_color('white')
ax.spines['left'].set_color('white')
ax.spines['right'].set_color('white')
ax.xaxis.label.set_color('white')
ax.yaxis.label.set_color('white')
ax.grid(alpha=0.1)
ax.title.set_color('white')
ax.tick_params(axis='x', colors='white')
ax.tick_params(axis='y', colors='white')

使用情形定义如下

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=50, n_classes=2, n_features=5, random_state=27)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=27)
fig=plt.figure()

plotfigure(lambda: plt.scatter(range(0,len(y)), y, marker=".",c="orange"), fig)

相关问题