축, 눈금 및 레이블의 색상을 변경하는 방법
매트플롯리브 및 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()
또는
[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))
타이핑가능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
해상도축 수준의 그림
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
이전의 기여자들로부터 동기를 얻어, 이것은 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)
언급URL : https://stackoverflow.com/questions/4761623/how-to-change-the-color-of-the-axis-ticks-and-labels
'bestsource' 카테고리의 다른 글
HTML 테이블에 가로 스크롤 막대 추가 (0) | 2023.09.21 |
---|---|
XMLHttpRequest에서 XXX No 'Access-Control-Allow-Origin' 헤더를 로드할 수 없습니다. (0) | 2023.09.21 |
파생 클래스가 인스턴스화될 때 추상 클래스 생성자가 암시적으로 호출되지 않습니까? (0) | 2023.09.21 |
MariaDB 도커가 로컬 도메인을 호스트로 사용하여 연결할 수 없음 (0) | 2023.09.21 |
jQuery를 사용하여 여러 개의 선택 상자 값을 얻는 방법은? (0) | 2023.09.21 |