python matplotlib自定义图例

标签 python python-3.x matplotlib legend

<分区>

我正在使用 python 将一些传感器数据从 arduino 传输和绘制到我的电脑。 我希望图表有一个带有一些值的图例(当然我也从我的串行连接中流出)但在所有示例中我发现图例的左侧有一个很大的空间。

如何删除它? (或者使用其他东西获得相同的输出)

这是我的代码:

#!/usr/bin/python

import matplotlib.pyplot as plt
import time
import numpy as np
from scipy.interpolate import spline
import matplotlib.patches as mpatches

# Local variables
x = []
y = []

# Open the data file for reading lines
datafile = open('./plotfiles/forceplot.txt', 'r')
sepfile = datafile.read().split('\n')
datafile.close()

# Create a canvas to place the subgraphs
canvas = plt.figure()
rect = canvas.patch
rect.set_facecolor('white')

# Iterate through the lines and parse them
for datapair in sepfile:
    if datapair:
        xypair = datapair.split(',')
        x.append(int(xypair[0]))
        y.append(int(xypair[1]))

x_sm = np.array(x)
y_sm = np.array(y)

x_smooth = np.linspace(x_sm.min(), x_sm.max(), 200)
y_smooth = spline(x, y, x_smooth)

# Define the matrix of 1x1 to place subplots
# Placing the plot1 on 1x1 matrix, at pos 1
sp1 = canvas.add_subplot(1,1,1)
#sp1.plot(x, y, 'red', linewidth=2)
sp1.plot(x_smooth, y_smooth, 'red', linewidth=1)

# Colorcode the tick tabs 
sp1.tick_params(axis='x', colors='red')
sp1.tick_params(axis='y', colors='red')

# Colorcode the spine of the graph
sp1.spines['bottom'].set_color('r')
sp1.spines['top'].set_color('r')
sp1.spines['left'].set_color('r')
sp1.spines['right'].set_color('r')

# Put the title and labels
sp1.set_title('matplotlib example 1', color='red')
sp1.set_xlabel('matplot x label', color='red')
sp1.set_ylabel('matplot y label', color='red')

# Show the plot/image
time = 'time: 00:23'
s = 3
sh = "success hits: "+str(s)
legend_dict = { sh: sh, 'total hits' : '5', time : time}
patchList=[]
for key in legend_dict:
    data_key = mpatches.Patch(color='None', label=key)
    patchList.append(data_key)

plt.legend(handles=patchList)

plt.tight_layout()
plt.grid(alpha=0.8)
plt.savefig("example6.eps")
plt.show()

这是输出:

enter image description here

最佳答案

由于颜色为无,因此显示空白区域。如果您使用文本:

text(x, y,'time: 00:23\n成功点击数:3\n总点击数:5', horizo​​ntalalignment='center', verticalalignment='center')

关于python matplotlib自定义图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237896/

相关文章:

python-3.x - 使用 Python 3 的 Sentry

python - 使用python在打开的cv中使用鼠标事件绘制矩形或线

python - 重用基础图而无需重新绘制

Python - 慢慢输入每个字符

python - 在 pandas DataFrame 多索引函数之外解压列表

python - 如何清理 pandas dataframe 中的图像网址?

python - 在 Pandas 中绘制多个条形图时如何更改条形之间的空间?

python - 在 Scipy/Matplotlib 中注释树状图节点

python - 在 Python 中,尝试使用第二个 RESX 的内容更新 RESX

python - 检查 Pygame 中 2 个 Hitboxes\Rectangles 是否重叠