Python Matplotlib文本不采用数组值

Python Matplotlib文本不采用数组值,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,以下是我尝试的代码: import matplotlib.pyplot as plt import numpy as np bb = [1,2,3,4,5,6,7,8,9,10] cc = ["red","red","yellow","red","green","red","red","green","red","red"] tt = ["\u2714","\u2714""\u2718","\u2714","\u2718","\u2714","\u2714","\u2718","\u2714",

以下是我尝试的代码:

import matplotlib.pyplot as plt
import numpy as np
bb = [1,2,3,4,5,6,7,8,9,10]
cc = ["red","red","yellow","red","green","red","red","green","red","red"]
tt = ["\u2714","\u2714""\u2718","\u2714","\u2718","\u2714","\u2714","\u2718","\u2714","\u2714"]
x1=np.arange(10)
x2=np.arange(10)
fig = plt.figure()
fig.set_size_inches(50,70)
ax1 = fig.add_subplot(331)

ax1.bar(np.arange(len(bb)), bb, color=cc,width=0.6)
text_applied = ax1.text(x1,2,tt,color=cc)

plt.show()
它以前没有任何问题地提供酒吧。但它不能处理文本。我得到以下错误:

Traceback (most recent call last):
  File "C:\Python35\lib\tkinter\__init__.py", line 1549, in __call__
    return self.func(*args)
  File "C:\Python35\lib\tkinter\__init__.py", line 596, in callit
    func(*args)
  File "C:\Python35\lib\site-packages\matplotlib\backends\_backend_tk.py", line 310, in idle_draw
    self.draw()
  File "C:\Python35\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 12, in draw
    super(FigureCanvasTkAgg, self).draw()
  File "C:\Python35\lib\site-packages\matplotlib\backends\backend_agg.py", line 433, in draw
    self.figure.draw(self.renderer)
  File "C:\Python35\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\figure.py", line 1475, in draw
    renderer, self, artists, self.suppressComposite)
  File "C:\Python35\lib\site-packages\matplotlib\image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Python35\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\axes\_base.py", line 2607, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "C:\Python35\lib\site-packages\matplotlib\image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Python35\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\text.py", line 706, in draw
    bbox, info, descent = textobj._get_layout(renderer)
  File "C:\Python35\lib\site-packages\matplotlib\text.py", line 282, in _get_layout
    key = self.get_prop_tup(renderer=renderer)
  File "C:\Python35\lib\site-packages\matplotlib\text.py", line 862, in get_prop_tup
    x, y = self.get_unitless_position()
  File "C:\Python35\lib\site-packages\matplotlib\text.py", line 844, in get_unitless_position
    x = float(self.convert_xunits(self._x))
TypeError: only size-1 arrays can be converted to Python scalars

请告诉我如何根据指定的颜色和x值显示文本。

我不太明白您的问题。在的文档中,我找不到将字符串数组输入参数的可能性:

定义:textx,y,s,fontdict=None,withdash=False,**kwargs

类型:matplotlib.pyplot模块的函数

向轴添加文本

将文本s添加到数据坐标中位置x、y处的轴上

参数

x、 y: 标量放置文本的位置。默认情况下,这是在 数据坐标。可以使用更改坐标系 变换参数。 学生:读课文

所以我建议你简单一点

for x, t, c in zip(x1, tt, cc):
    ax1.text(x, 2, t, color=c)

我不太明白你的问题。在的文档中,我找不到将字符串数组输入参数的可能性:

定义:textx,y,s,fontdict=None,withdash=False,**kwargs

类型:matplotlib.pyplot模块的函数

向轴添加文本

将文本s添加到数据坐标中位置x、y处的轴上

参数

x、 y: 标量放置文本的位置。默认情况下,这是在 数据坐标。可以使用更改坐标系 变换参数。 学生:读课文

所以我建议你简单一点

for x, t, c in zip(x1, tt, cc):
    ax1.text(x, 2, t, color=c)

我不确定您的预期输出是什么,但如果您希望在每个条下有不同颜色的符号,可以将其设置为如下所示的记号:

import matplotlib.pyplot as plt
import numpy as np

bb = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
cc = ["red", "red", "yellow", "red", "green", "red", "red", "green", "red", "red"]
tt = ["\u2714", "\u2714", "\u2718", "\u2714", "\u2718", "\u2714", "\u2714", "\u2718", "\u2714", "\u2714"]

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.bar(range(len(bb)), bb, color=cc, width=0.6)
ax1.set_xticks(range(len(bb)))
ax1.set_xticklabels(tt)
for xtick, color in zip(ax1.get_xticklabels(), cc):
    xtick.set_color(color)
plt.show()
输出:


顺便说一句,请注意,在您的代码中,tt在第二个和第三个元素之间缺少一个逗号。

我不确定您的预期输出是什么,但是如果您希望在每个条下面有不同颜色的符号,可以将它们设置为如下所示的记号:

import matplotlib.pyplot as plt
import numpy as np

bb = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
cc = ["red", "red", "yellow", "red", "green", "red", "red", "green", "red", "red"]
tt = ["\u2714", "\u2714", "\u2718", "\u2714", "\u2718", "\u2714", "\u2714", "\u2718", "\u2714", "\u2714"]

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.bar(range(len(bb)), bb, color=cc, width=0.6)
ax1.set_xticks(range(len(bb)))
ax1.set_xticklabels(tt)
for xtick, color in zip(ax1.get_xticklabels(), cc):
    xtick.set_color(color)
plt.show()
输出:


顺便说一句,请注意,在您的代码中,tt在第二个和第三个元素之间缺少一个逗号。

这是一个很好的模式,将标签的getter放入for循环中,以迭代方式访问它返回的列出的对象的属性!先生,我很感谢您的编辑。是的,上面的输出是我所期望的。仅供参考,我想知道我是否希望它随着时间的推移而改变,我是否需要清除轴以避免重叠,或者您是否考虑过it@JafferWilson可以清除轴并再次绘制,也可以编辑已绘制的对象。通常,在Matplotlib中,每个绘图命令plot、bar、text、。。。返回一个或多个可以操作的对象,或者您也可以从轴检索图形基本体,例如,如果你使用它,它比在每一帧上清除和重画要有效得多。这是一个很好的模式,将标签的getter放入for循环中,以迭代方式访问它返回的列出的对象的属性!先生,我很感谢您的编辑。是的,上面的输出是我所期望的。仅供参考,我想知道我是否希望它随着时间的推移而改变,我是否需要清除轴以避免重叠,或者您是否考虑过it@JafferWilson可以清除轴并再次绘制,也可以编辑已绘制的对象。通常,在Matplotlib中,每个绘图命令plot、bar、text、。。。返回一个或多个可以操作的对象,或者您也可以从轴检索图形原语,例如,如果您使用此选项,则比在每个帧上清除和重绘要高效得多。