我试图创建一个散点图的测量,其中x标签是WIFI通道。默认情况下,matplotlib是按其数值的比例间隔标签。不过,我希望它们能均匀地分布在散点图上。这有可能吗?
这基本上就是我的绘图代码目前的样子:-其中chanPoints是一个频率列表,而测量是一个测量列表。
plt.scatter(chanPoints,measurements)
plt.xlabel('Frequency (MHz)')
plt.ylabel('EVM (dB)')
plt.xticks(Tchan,rotation = 90)
plt.title('EVM for 5G Channels by Site')
plt.show()

发布于 2017-05-30 21:23:58
Numpy
您可以使用numpy创建一个数组,该数组将chanPoints中的唯一项映射到数字0,1,2...。然后,您可以给每个这些数字相应的标签。
import matplotlib.pyplot as plt
import numpy as np
chanPoints = [4980, 4920,4920,5500,4980,5500,4980, 5500, 4920]
measurements = [5,6,4,3,5,8,4,6,3]
unique, index = np.unique(chanPoints, return_inverse=True)
plt.scatter(index, measurements)
plt.xlabel('Frequency (MHz)')
plt.ylabel('EVM (dB)')
plt.xticks(range(len(unique)), unique)
plt.title('EVM for 5G Channels by Site')
plt.show()

海航
如果您喜欢使用海运,这可以节省大量的手工工作。Seaborn是专门用于绘制分类数据的。chanPoints将被解释为x轴上的类别,如果您使用的是swarmplot,那么它们之间的间距是相同的。如果有几个点会重叠,它们就会在彼此的旁边绘制,这可能是一个优势,因为它允许看到该信道的测量数量。
import matplotlib.pyplot as plt
import seaborn.apionly as sns
chanPoints = [4980, 4920,4920,5500,4980,5500,4980, 5500, 4920]
measurements = [5,6,4,3,5,8,4,6,3]
sns.swarmplot(chanPoints, measurements)
plt.xlabel('Frequency (MHz)')
plt.ylabel('EVM (dB)')
plt.title('EVM for 5G Channels by Site')
plt.show()

发布于 2017-05-30 21:05:48
将chanPoints替换为index。
index = numpy.searchsorted(Tchan, chanPoints)
plt.scatter(index, measurements)然后使用相应的标签构建您的xticks。
ticks = range(len(Tchan))
plt.xticks(ticks, labels=Tchan, rotation = 90)https://stackoverflow.com/questions/44271754
复制相似问题