Matplotlib 简明教程
Matplotlib - Spines
What are Spines?
在 Matplotlib 库中, spines 指的是构成数据区域框架的绘图边框或边。这些脊线包含绘图的边界,定义了显示数据点区域。默认情况下,一个绘图有四个脊线,例如顶部、底部、左侧和右侧。
通过允许定制外观、颜色、厚度和可见度,在 Matplotlib 中操纵脊线提供了设计绘图视觉效果的灵活性,从而更量身定制并美观地展示数据。
Key Characteristics of Spines
以下是脊线的特征。
Borders of the Plot - 脊线形成绘图区域的边框,包裹可视化数据的区域。
Configurable Properties - 可以通过允许调整外观、颜色、厚度和可见度来分别自定义每个脊线(顶部、底部、左侧和右侧)。
Visibility Control - 可以显示或隐藏脊线以修改绘图的外观。
Uses of Spines
Plot Customization - 脊线允许自定义绘图的外观,从而可以调整绘图的边界和样式。
Aesthetics and Visualization - 自定义脊线可以增强绘图的美观性,并将注意力吸引到特定关注区域。
Types of spines
现在,让我们详细了解绘图中可用的每个脊线。
Top Spine
顶部脊线是指绘图区域顶部水平线,它对应于 y 轴的上边界。它是构成绘图周围边框的四个脊线之一,如顶部、底部、左侧和右侧。
Boundary Line - 顶部虚线表示沿 y 轴的绘图区域的上边界。
Default Visibility - 默认情况下,顶部虚线在 Matplotlib 绘图中可见。
Customization - 与其他虚线类似,顶部虚线可以根据其可见性、颜色、线型和线宽进行自定义。
在这个示例中, ax.spines['top'].set_visible(False) 通过移除沿 y 轴的绘图区域的上边界来隐藏顶部虚线。
import matplotlib.pyplot as plt
# Creating a simple plot
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
# Accessing and modifying the top spine
ax = plt.gca() # Get the current axes
ax.spines['top'].set_visible(False) # Hide the top spine
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Plot with Hidden Top Spine')
plt.show()
Aesthetic Control - 自定义顶部虚线的可见性、颜色或样式可以提升外观或匹配特定的设计要求。
Adjusting Plot Boundaries - 当绘图不需要上边界或创建特定的视觉效果时,隐藏顶部虚线可能非常有用。
Bottom Spine
在 Matplotlib 中,底部虚线是指形成绘图区域与 x 轴对应的下边界的水平线。
Association with x-axis - 底部虚线表示沿 x 轴的绘图边界,定义绘图区域的下边界。
Customization - 与其他虚线类似,底部虚线可以根据其可见性、颜色、线型、厚度和位置进行自定义。
在这个示例中, ax.spines['bottom'].set_color('blue') 通过使用将底部虚线颜色更改为蓝色, ax.spines['bottom'].set_linewidth(2) 设置底部虚线厚度为 2,并且 ax.spines['bottom'].set_visible(True) 确保底部虚线在隐藏的情况下可见。
import matplotlib.pyplot as plt
# Creating a simple plot
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
# Accessing and customizing the bottom spine
ax = plt.gca() # Get the current axes
ax.spines['bottom'].set_color('blue') # Change the color of the bottom spine to blue
ax.spines['bottom'].set_linewidth(2) # Set the thickness of the bottom spine to 2
ax.spines['bottom'].set_visible(True) # Make the bottom spine visible (if previously hidden)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Plot with Customized Bottom Spine')
plt.show()
Emphasizing Axes - 通过自定义底部虚线可以吸引对 x 轴的注意并增强绘图的美观性。
Highlighting Plot Boundaries - 通过调整底部虚线的外观,可以帮助描绘绘图区域并提高其清晰度。
Left Spine
在 Matplotlib 中,左侧虚线是指形成绘图区域左侧边界的垂直线,对应于 y 轴。
Association with y-axis - 左侧虚线表示沿着 y 轴的绘图边界,定义绘图区域的左边界。
Customization - 左侧虚线的自定义类似于其他松树,可以通过颜色、可见性、边框宽度等进行自定义。
在这个示例中, ax.spines['left'].set_color('green') 更改左侧虚线颜色为绿色, ax.spines['left'].set_linewidth(2) 设置左侧虚线厚度为 2,并且 ax.spines['left'].set_visible(False) 确保左侧虚线在可见的情况下不可见。
import matplotlib.pyplot as plt
# Creating a simple plot
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
# Accessing and customizing the left spine
ax = plt.gca() # Get the current axes
ax.spines['left'].set_color('green') # Change the color of the left spine to green
ax.spines['left'].set_linewidth(2) # Set the thickness of the left spine to 2
ax.spines['left'].set_visible(False) # Make the left spine invisible (if previously visible)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Plot with Customized Left Spine')
plt.show()
Right Spine
在 Matplotlib 中,右侧虚线表示形成绘图区域右侧边界的垂直线,对应于右侧的 y 轴。
Associated with y-axis - 右侧虚线定义绘图在沿 y 轴的右侧边界,表示绘图右侧的 y 轴。
Customization - 与其他虚线类似,右侧虚线可以根据其可见性、颜色、线型、厚度和位置进行自定义。
在此示例中,我们使用 ax.spines['right'] 自定义图表的右侧边框。
import matplotlib.pyplot as plt
# Creating a simple plot
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
# Accessing and customizing the right spine
ax = plt.gca() # Get the current axes
ax.spines['right'].set_color('green') # Change the color of the right spine to green
ax.spines['right'].set_linewidth(2) # Set the thickness of the right spine to 2
ax.spines['right'].set_visible(True) # Make the right spine visible (if previously hidden)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Plot with Customized Right Spine')
plt.show()
Customize spines of Matplotlib figures
在此示例中,我们将创建六个图形以查看并自定义其边框。
#First import the required libraries for the workbook.
import numpy as np
import matplotlib.pyplot as plt
#draw graph for sines
theta = np.linspace(0, 2*np.pi, 128)
y = np.sin(theta)
fig = plt.figure(figsize=(8,6))
#Define the axes with default spines
ax1 = fig.add_subplot(2, 3, 1)
ax1.plot(theta, np.sin(theta), 'b-*')
ax1.set_title('default spines')
#Define the function to plot the graph
def plot_graph(axs, title, lposition, bposition):
ax = fig.add_subplot(axs)
ax.plot(theta, y, 'b-*')
ax.set_title(title)
ax.spines['left'].set_position(lposition)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_position(bposition)
ax.spines['top'].set_visible(False)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
#plot 3 graphs
plot_graph(232, 'centered spines', 'center', 'center')
plot_graph(233, 'zeroed spines', 'zero', 'zero')
plot_graph(234, 'spines at axes [0.25, 0.75]', ('axes', 0.25),('axes', 0.75))
plot_graph(235, 'spines at data [1.0, -1.0]', ('data', 1.0),('data', -1.0))
plot_graph(236, 'adjusted spines', ('outward', 10), ('outward', 10))
#fit the plot in the grid and display.
plt.tight_layout()
plt.show()