您提供的链接带来了一张世界地图。我在这里展示的示例只有带有连接它们的线的标记(因此它们不是地理本地化的)。在任何情况下使用 matplotlib(不了解 GNUplot),您都可以修改以下配方:
import random
import matplotlib.pyplot as plt
x = ['01.01.1960','12.01.1960','12.01.1960','01.01.1970','13.04.1980']
y = ['Heavy Rain','Sunshine','Slight Hail','Heavy Rain','Slight Hail']
l = ['New York','Sacramento','Seattle','Boston','San Francisco']
nx,ny = [],[]
for i in range(len(x)):
nx.append(i)
ny.append(-i)
s = random.randint(100,150)
m = random.choice(['o','s','^','d'])
color = random.randint(0,255)/255,random.randint(0,255)/255,random.randint(0,255)/255
plt.scatter(i,-i,s=s,marker=m,color=color,label=y[i])
plt.text(i,-i,x[i])
plt.plot(nx,ny,'--')
plt.legend()
plt.show()
这会给出这样的图像:
请注意,我正在更改标记的大小、标记本身、颜色、向每个点添加文本,最后提示一个图例。
如果你想绘制一张考虑真实位置的地图,你可能想看看Basemap
编辑(在海报明确其意图后):
以下代码:
xt = [63072000,64022400,64022400,315532800,639964800,706320000]
y2 = [33,12,21,33,21,33]
l = ['New York','Sacramento','Seattle','Boston','San Francisco','Seattle']
lm = ['o','s','^','d','*','^']
cl = ['red','blue','green','orange','purple','green']
import matplotlib.pyplot as plt
from matplotlib.dates import YearLocator, MonthLocator, DateFormatter,AutoDateLocator
import datetime
# get the dates into something readable
x2 = [datetime.datetime.fromtimestamp(i) for i in xt]
years = YearLocator() # every year
months = MonthLocator() # every month
yearsFmt = DateFormatter('%Y')
auto = AutoDateLocator()
# plot lines and markers
fig, ax = plt.subplots()
ax.plot_date(x2, y2, '--',color='black')
for i in range(len(x2)):
ax.scatter(x2[i],y2[i],s=300,marker=lm[i],color=cl[i])
plt.text(x2[i],y2[i],l[i])
# format the ticks
ax.xaxis.set_major_locator(auto)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(months)
ax.autoscale_view()
ax.set_yticks([10,20,30], minor=False)
ax.set_yticklabels(['Sunny','More or Less','Rainy'])
#ax.yticks([10,20,30], ['Sunny','More or Less','Rainy'], rotation='vertical')
ax.fmt_xdata = DateFormatter('%Y-%m-%d')
ax.grid(True)
fig.autofmt_xdate()
plt.show()
,会产生如下结果:
注意:我必须说这是一个非常奇怪的情节。直觉上,在我看来,趋势应该针对每个城市而不是城市之间(您应该为每个城市设置一条线,尽管您似乎没有数据来绘制这样的图)。无论如何,这是满足您要求的代码。