如何让Matplotlib.pyplot停止强制应用标记样式

如何让Matplotlib.pyplot停止强制应用标记样式

参考: How can I make Matplotlib.pyplot stop forcing the style of my markers

在使用Matplotlib绘图时,我们可能会遇到一个问题:Matplotlib.pyplot似乎在某些情况下会强制应用特定的标记样式,这可能会与我们想要的自定义样式发生冲突。本文将详细介绍如何在使用Matplotlib时保持标记样式的自定义,并提供多个示例代码来展示如何实现这一目标。

1. 理解Matplotlib标记样式

在Matplotlib中,标记(marker)是指在图表中代表数据点的符号。标记的样式可以通过多种属性进行自定义,包括形状、大小、颜色等。然而,有时候我们可能会发现即使设置了特定的标记样式,最终显示的图表却不是我们预期的样子。这可能是因为Matplotlib的某些默认设置或者样式表在起作用。

2. 控制标记样式

要让Matplotlib停止强制应用标记样式,我们需要明确指定我们想要的样式,并确保不使用任何可能覆盖这些设置的默认样式表。以下是一些控制标记样式的方法:

示例代码 1:设置标记样式

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='o', linestyle='-', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 2:改变标记大小和颜色

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='s', markersize=10, markerfacecolor='red', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 3:使用scatter函数自定义标记

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.scatter(x, y, s=100, c='blue', marker='^', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 4:设置透明度

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.scatter(x, y, s=100, c='green', alpha=0.5, marker='D', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 5:使用不同的标记样式

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='*', linestyle='--', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 6:自定义标记边缘颜色和宽度

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='o', markeredgewidth=2, markeredgecolor='black', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 7:使用自定义路径作为标记

import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches

verts = [
    (0., 0.),  # left, bottom
    (0., 1.),  # left, top
    (1., 1.),  # right, top
    (1., 0.),  # right, bottom
    (0., 0.),  # ignored
]

codes = [Path.MOVETO, Path.LINETO, Path.LINETO, Path.LINETO, Path.CLOSEPOLY,]

path = Path(verts, codes)

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.scatter(x, y, s=100, c='orange', marker=path, label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 8:禁用样式表中的标记样式

import matplotlib.pyplot as plt
from matplotlib import style

style.use('default')  # 使用默认样式,不应用任何预设的样式表

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='p', linestyle=':', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 9:使用rcParams直接设置样式

import matplotlib.pyplot as plt
from matplotlib import rcParams

rcParams['lines.marker'] = 'x'
rcParams['lines.markersize'] = 12

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, linestyle='-.', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 10:结合多种样式属性

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='h', linestyle='-', markersize=15, markerfacecolor='yellow', markeredgewidth=3, markeredgecolor='blue', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 11:使用plot_date绘制时间序列数据

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime

dates = [datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3), datetime(2021, 1, 4), datetime(2021, 1, 5)]
values = [1, 3, 2, 5, 4]

plt.plot_date(dates, values, marker='o', linestyle='-', label='how2matplotlib.com')
plt.legend()
plt.show()

示例代码 12:使用fillstyle控制标记的填充样式

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='o', linestyle='-', fillstyle='top', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 13:结合使用plot和scatter自定义不同数据点的样式

import matplotlib.pyplot as plt

x1 = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
x2 = [1.5, 2.5, 3.5, 4.5, 5.5]
y2 = [1, 4, 2, 6, 3]

plt.plot(x1, y1, marker='o', linestyle='-', color='blue', label='Line 1 - how2matplotlib.com')
plt.scatter(x2, y2, s=100, c='red', marker='^', label='Scatter - how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 14:使用annotate添加注释并自定义标记样式

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y, marker='o', linestyle='-', label='how2matplotlib.com')
plt.annotate('Peak', xy=(3, 5), xytext=(2, 6), arrowprops=dict(facecolor='black', shrink=0.05), marker='*', markersize=15)
plt.legend()
plt.show()

示例代码 15:使用bar绘制条形图并自定义标记样式

import matplotlib.pyplot as plt

categories = ['A', 'B', 'C', 'D', 'E']
values = [3, 7, 2, 5, 6]

plt.bar(categories, values, color='lightblue', edgecolor='black', hatch='/', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 16:使用hexbin创建六边形箱图

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)
y = np.random.randn(1000)

plt.hexbin(x, y, gridsize=30, cmap='Blues', label='how2matplotlib.com')
plt.colorbar(label='Count in bin')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 17:使用polar参数创建极坐标图

import matplotlib.pyplot as plt
import numpy as np

r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r

plt.subplot(111, polar=True)
plt.plot(theta, r, label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 18:使用stackplot创建堆叠面积图

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [1, 2, 3, 2, 1]
y2 = [2, 2, 3, 2, 2]
y3 = [1, 3, 2, 3, 1]

plt.stackplot(x, y1, y2, y3, labels=['Y1', 'Y2', 'Y3'], colors=['m', 'c', 'r'])
plt.legend(title='how2matplotlib.com')
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 19:使用errorbar绘制误差线并自定义标记样式

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
yerr = [0.2, 0.4, 0.2, 0.3, 0.1]

plt.errorbar(x, y, yerr=yerr, fmt='o', ecolor='pink', capsize=5, linestyle='-', color='blue', label='how2matplotlib.com')
plt.legend()
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

示例代码 20:使用violinplot创建小提琴图

import matplotlib.pyplot as plt
import numpy as np

data = [np.random.normal(0, std, 100) for std in range(1, 5)]

plt.violinplot(data, showmeans=False, showmedians=True)
plt.title('how2matplotlib.com')
plt.show()

Output:

如何让Matplotlib.pyplot停止强制应用标记样式

以上示例代码展示了如何在Matplotlib中自定义标记样式,并通过不同的绘图函数来实现各种图表的绘制。在每个示例中,我们都确保了标记样式的自定义不会被Matplotlib的默认样式所覆盖。通过这些示例,你可以更好地控制你的图表中的标记样式,使其符合你的需求和偏好。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程