【问题标题】:matplotlib data points plotted but no line between them?matplotlib 数据点绘制但它们之间没有线?
【发布时间】:2016-04-20 20:21:59
【问题描述】:

我想在同一轴上绘制一个包含多个数据集的折线图,因此标记会显示,但线不会显示。我真的看不出我做错了什么。请问有人可以另眼相看吗?

这是打印出来的数据:

looking at 2015-08-05 83.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-05 y =  83.0
looking at 2015-08-06 50.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-06 y =  50.0
looking at 2015-08-07 42.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-07 y =  42.0
looking at 2015-08-10 75.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-10 y =  75.0

这里是代码段:

for count, symb in enumerate(my_symbols):
   sector = sector_format[str(sym_sect[symb])][0]
   shape = sector_format[str(sym_sect[symb])][1]
   kolor = sector_format[str(sym_sect[symb])][2]
   x = my_dates[count]
   y = rank_2010[count]
   print("looking at",x,y,symb,"attribs",
         "sector=",sector,
         "shape=",shape,
         "kolor=",kolor,
         "x =",x,
         "y = ",y)

  if symb == 'AA' or symb == "AAPL":
     plt.plot(x,y,lw=5,color=kolor,linestyle='solid',marker=shape)

plt.title('hv 20 to 10 ranks')
plt.xlabel('dates')
plt.ylabel('symbol ranks')
plt.show()

【问题讨论】:

  • 如果我们可以获得非字符串格式的数据(例如,可能在可复制粘贴的列表中),那就容易多了。我认为正在发生的事情是您将每个点绘制为不同的线,然后手动将它们全部设置为相同的标记和形状。打开图例,您可能会在其中看到 4 组不同的数据。您要做的是将数据放入 2 个列表 x, y 并将这些列表发送到 for 循环之外的 plt.plot。
  • 嘿,ljetibo,但数据集有点棘手。基本上我有 1000 天的 100 个符号的数据。我将这些天分成一个列表(my_dates[],它是 x 轴),另一个列表是排名数据(rank_2010[]),它是 y 轴。)现在是棘手的部分。每个 rank_2010 都有一个用于查找扇区的符号(在这种情况下,符号 = AA,即扇区“材料”)一个扇区有一组应用于一条线的属性,所以我想最终绘制所有 100 个符号使用他们相关的扇区格式,当我指向一条线时,我得到了符号。

标签: python matplotlib


【解决方案1】:

您的问题是您多次致电plot,希望它收集您提供给它的数据到一组中。 plot 不是这样工作的。您需要形成一个数据集(图中的一条“线”)并将其传递给plot。大致如下:

x_list = []
y_list = []

for count, symb in enumerate(my_symbols):
   sector = sector_format[str(sym_sect[symb])][0]
   shape = sector_format[str(sym_sect[symb])][1]
   kolor = sector_format[str(sym_sect[symb])][2]
   x = my_dates[count]
   y = rank_2010[count]
   print("looking at",x,y,symb,"attribs",
         "sector=",sector,
         "shape=",shape,
         "kolor=",kolor,
         "x =",x,
         "y = ",y)

  if symb == 'AA' or symb == "AAPL":
      x_list.append(x)
      y_list.append(y)

plt.plot(x_list,y_list,lw=5,color=kolor,linestyle='solid',marker=shape)

plt.title('hv 20 to 10 ranks')
plt.xlabel('dates')
plt.ylabel('symbol ranks')
plt.show()

这可能不是您想要的。我不清楚你想用不同的颜色和标记做什么,所以你可能需要修改它。不过,我认为它至少应该让你朝着正确的方向前进。

【讨论】:

  • 嘿 CrazyCasta 抱歉,我在回复 ljetibo 之前没有阅读此内容,我在其中澄清了为什么这比看起来更复杂。我一定会尝试您的方法,并感谢您查看此内容。
  • 感谢您的尝试,但没有运气。如果它只是绘制 x 和 y,我会是一只快乐的兔子,但我必须循环 1000 天,每个天都包含一个股票的排名。排名是 y 轴,日期是 x 轴,这给了我第一点。股票代码给了我决定线属性的部门。所以我将文件排序为已经按日期顺序排列的符号顺序。我循环遍历每个符号绘制的所有日子(或者不是在我的情况下:-))“线”。感谢您的尝试,但我已经尝试过,并且使用您的代码再次这样做,但运气不好
  • 我的代码是否至少可以绘制线条?我的意思是,这不仅仅是绘图点,对吧?
  • 另外,要明确的是,您是否要求每扇区一行?
  • 嘿 CrazyCasta 抱歉,根本没有行,不,这比每个扇区只有一行更糟糕。数据是每一天有 100 个符号,每个符号都有 1 到 100 的等级。所以每天(x 轴)在 Y 轴(等级)上有 100 个点。现在因为 100 个形状看起来很乱,我必须将每只股票分组到它的扇区(有 7 个扇区)并将点绘制为该符号。所以现在我进入第二天并重复从昨天到今天加入积分的过程。而且我需要用股票代码标记该行。这就是为什么我在这里很难过。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 2015-07-12
  • 2014-12-23
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
相关资源
最近更新 更多