bestsource

축, 눈금 및 레이블의 색상을 변경하는 방법

bestsource 2023. 9. 21. 20:40
반응형

축, 눈금 및 레이블의 색상을 변경하는 방법

매트플롯리브 및 PyQt를 사용하여 수행한 플롯에 대한 눈금 및 값 레이블뿐만 아니라 축의 색상도 변경하고 싶습니다.

무슨 생각 있어요?

간단한 예로 (중복 가능성이 있는 질문보다 약간 깨끗한 방법 사용):

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

alt text

또는

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

수정하려는 그림이나 하위 그림이 여러 개 있는 경우에는 각각 개별적으로 변경하는 대신 매트플롯컨텍스트 관리자를 사용하여 색상을 변경하는 것이 도움이 될 수 있습니다.context manager를 사용하면 바로 이어지는 들여쓰기 코드에 대해서만 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))

enter image description here

enter image description here

타이핑가능plt.rcParams사용 가능한 모든 RC 파라미터를 보고 목록 이해력을 사용하여 키워드를 검색합니다.

# Search for all parameters containing the word 'color'
[(param, value) for param, value in plt.rcParams.items() if 'color' in param]
  • 를 사용하는 경우 데이터 프레임에서 플롯을 작성할 때 반환됩니다.따라서 데이터 프레임 그림을 변수에 할당할 수 있습니다.ax, 이를 통해 관련 포맷 메소드를 사용할 수 있습니다.
  • 기본 플롯 백엔드:pandas, 가matplotlib.
  • 보기
  • 테스트 인python 3.10,pandas 1.4.2,matplotlib 3.5.1,seaborn 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

enter image description here

해상도축 수준의 그림

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

enter image description here

뱃속의 인물 수준의 줄거리

# 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

enter image description here

이전의 기여자들로부터 동기를 얻어, 이것은 3개의 축의 예입니다.

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

이 방법을 사용하여 동일한 그림에 여러 개의 그림을 그리고 동일한 색상 팔레트를 사용하여 스타일을 지정할 수도 있습니다.

예는 아래에 제시되어 있습니다.

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

출력:

여기에는 필요한 Arg를 사용하여 플롯 함수를 사용하고 필요한 배경색 스타일로 그림을 표시하는 유틸리티 기능이 있습니다.필요에 따라 인수를 더 추가할 수 있습니다.

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)

The Figure Output

언급URL : https://stackoverflow.com/questions/4761623/how-to-change-the-color-of-the-axis-ticks-and-labels

반응형