如何添加其他 x 轴但具有不同的比例和颜色(matplotlib)

用户572780

我有以下情节:

在此处输入图片说明

三行中的每一行都属于不同的 x 轴比例。例如,全连接线的 x 轴应介于 0.001 和 0.02 之间;kNN 线的 x 轴的范围应在 2 到 40 之间。我想消除当前的 x 轴并拥有三个 x 轴,一个在另一个下方,每个轴的缩放比例和颜色都不同。

这是我的代码:

## Plot means
x_full = np.linspace(0.001, 0.02, 20)
x_enn = np.linspace(0.05, 1.95, 20)
x_knn = np.linspace(2, 40, 20)
x = np.arange(len(x_full))

fig, ax = plt.subplots(1, 2, figsize=(13.2, 4))

## Set color
ax[0].set_prop_cycle(color=color_list)
ax[1].set_prop_cycle(color=color_list)

## Plot means
ax[0].plot(x, two_moons_acc_mean['full'], label='Fully Connected')
ax[0].plot(x[1:], two_moons_acc_mean['enn'][0.1:], label=r'$\epsilon$-N')
ax[0].plot(x, two_moons_acc_mean['knn'], label=r'$k$NN')

ax[1].plot(x, two_moons_acc_mean['full'], label='Fully Connected')
ax[1].plot(x[1:], two_moons_acc_mean['enn'][0.1:], label=r'$\epsilon$-N')
ax[1].plot(x, two_moons_acc_mean['knn'], label=r'$k$NN')

## Plot standard deviations
ax[0].fill_between(
    x,
    two_moons_acc_mean['full'] - two_moons_acc_std['full'],
    two_moons_acc_mean['full'] + two_moons_acc_std['full'],
    alpha=0.2
)
ax[0].fill_between(
    x[1:],
    two_moons_acc_mean['enn'][0.1:] - two_moons_acc_std['enn'][0.1:],
    two_moons_acc_mean['enn'][0.1:] + two_moons_acc_std['enn'][0.1:],
    alpha=0.2
)
ax[0].fill_between(
    x,
    two_moons_acc_mean['knn'] - two_moons_acc_std['knn'],
    two_moons_acc_mean['knn'] + two_moons_acc_std['knn'],
    alpha=0.2
)

ax[1].fill_between(
    x,
    two_moons_acc_mean['full'] - two_moons_acc_std['full'],
    two_moons_acc_mean['full'] + two_moons_acc_std['full'],
    alpha=0.2
)
ax[1].fill_between(
    x[1:],
    two_moons_acc_mean['enn'][0.1:] - two_moons_acc_std['enn'][0.1:],
    two_moons_acc_mean['enn'][0.1:] + two_moons_acc_std['enn'][0.1:],
    alpha=0.2
)
ax[1].fill_between(
    x,
    two_moons_acc_mean['knn'] - two_moons_acc_std['knn'],
    two_moons_acc_mean['knn'] + two_moons_acc_std['knn'],
    alpha=0.2
)

## Loglog plot
ax[1].set_xscale('log')
ax[1].set_yscale('log')

## Add Legend
ax[0].legend(loc='lower left', ncol=3, frameon=False)
ax[1].legend(loc='lower left', ncol=3, frameon=False)
和风

您应该使用 3 个不同的轴,一个用于您需要绘制的每条线。
第一个可以是:

fig, ax_full = plt.subplots()

full = ax_full.plot(x_full, y_full, color = 'red', label = 'full')

然后你可以生成其他的:

ax_enn = ax_full.twiny()

并在各自的轴上绘制每条线:

enn = ax_enn.plot(x_enn, y_enn, color = 'blue', label = 'enn')

然后您可以使用以下命令将轴移动到底部:

ax_enn.xaxis.set_ticks_position('bottom')
ax_enn.xaxis.set_label_position('bottom')
ax_enn.spines['bottom'].set_position(('axes', -0.15))

最后自定义颜色:

ax_enn.spines['bottom'].set_color('blue')
ax_enn.tick_params(axis='x', colors='blue')
ax_enn.xaxis.label.set_color('blue')

全码

import numpy as np
import matplotlib.pyplot as plt


x_full = np.linspace(0.001, 0.02, 20)
x_enn = np.linspace(0.05, 1.95, 20)
x_knn = np.linspace(2, 40, 20)

y_full = np.random.rand(len(x_full))
y_enn = np.random.rand(len(x_enn))
y_knn = np.random.rand(len(x_knn))


fig, ax_full = plt.subplots()

full = ax_full.plot(x_full, y_full, color = 'red', label = 'full')
ax_full.spines['bottom'].set_color('red')
ax_full.tick_params(axis='x', colors='red')
ax_full.xaxis.label.set_color('red')


ax_enn = ax_full.twiny()
enn = ax_enn.plot(x_enn, y_enn, color = 'blue', label = 'enn')
ax_enn.xaxis.set_ticks_position('bottom')
ax_enn.xaxis.set_label_position('bottom')
ax_enn.spines['bottom'].set_position(('axes', -0.15))
ax_enn.spines['bottom'].set_color('blue')
ax_enn.tick_params(axis='x', colors='blue')
ax_enn.xaxis.label.set_color('blue')


ax_knn = ax_full.twiny()
knn = ax_knn.plot(x_knn, y_knn, color = 'green', label = 'knn')
ax_knn.xaxis.set_ticks_position('bottom')
ax_knn.xaxis.set_label_position('bottom')
ax_knn.spines['bottom'].set_position(('axes', -0.3))
ax_knn.spines['bottom'].set_color('green')
ax_knn.tick_params(axis='x', colors='green')
ax_knn.xaxis.label.set_color('green')


lines = full + enn + knn
labels = [l.get_label() for l in lines]
ax_full.legend(lines, labels)

plt.tight_layout()

plt.show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据数据列的值向X轴添加其他值?

在具有动态x轴类别的Highcharts工具提示中添加其他数据

如何在Python matplotlib中使x轴和y轴的比例相等?

在Python中,如何绘制具有相同x和y轴的不同类别的数据?

Matplotlib:如何绘制具有不同颜色和注释的集群?

合并两个具有共同x轴的coord_polar图并添加x轴比例尺

如何使用matplotlib / seaborn和pandas数据框创建具有共享x轴的上下条形图

如何在altair中添加具有不同比例(与y轴平行)的新轴

如何在R的同一图上创建具有不同x和y轴的两个条形图?

Seaborn.Distplot生成直方图和具有不同x轴的KDE线-它们如何在绘图中合并?

JFreeChart的| 如何比例添加到每个酒吧和格式域轴的顶部(X轴)ticklabels?

添加其他X轴标题时,子图会分解

添加不共享x轴的子图(其他子图不共享)

如何添加具有分类特征的辅助X轴?

如何调整 x 轴的大小并使其与 y 轴不同 Matplotlib

Matplotlib-如何定义具有不同间隔的x轴(如下一张图片)?我想打开一定的间隔

如何创建具有多个Y轴和公共X轴的堆叠JavaFX图表

如何在 X 轴和 Y 轴上绘制具有多个变量的折线图

在图上添加其他X轴,并添加一些线/注释以显示其下数据的百分比

如何在 matplotlib 中使用不同的 xlimit 和 x 轴的大小绘制子图?

如何使用matplotlib绘制具有不同阴影和边缘颜色的条形图和图例?

如何在 matplotlib 中的绘图中添加其他标签?

一个绘图中的两个(或多个)图形在python中具有不同的x轴和y轴比例

如何删除其他软件所依赖的iconv的旧版本?(和其他可爱的问题)[OS X]

如何使用Matplotlib绘制具有非线性x轴刻度的曲线?

如何连接具有不连续x轴边界的matplotlib LineCollection段?

如何在高图中以X轴显示日期,以y轴显示其他列

如何添加 kivymd 和其他用于 buildozer 的模块?

如何在现有视频中添加其他音轨