ascii_graph 适用于原始文字,但不适用于“zip”中的相同(?)数组

问题描述 投票:0回答:1

我正在试用 Python 的

ascii_graph
包。 如果我使用
numpy.arange
zip
组合直方图数据,则绘图失败。 如果我从原始文字组装数据,它就会成功。 谁能解释一下有什么区别吗?

import numpy as np
BinMid = np.arange(20) + 1 # Bin edges
BinEdge = np.arange(21) + 0.5 # Bin mid-oints
nDist = np.array( # Bin counts
   [  7083,    73485,   659204,  3511238, 10859771, 22162510,
      34511661, 45891902, 55651178, 59153091, 56242073,
      48598282, 37947325, 27541907, 19356046, 13630601,
      8810979, 4262462, 1227506,   216751], dtype=np.int64 )

# Histogram data
histData = list( zip( BinMid.astype(str) , nDist ) )
#   [('1', 7083),
#    ('2', 73485),
#    ('3', 659204),
#    ('4', 3511238),
#    ('5', 10859771),
#    ('6', 22162510),
#    ('7', 34511661),
#    ('8', 45891902),
#    ('9', 55651178),
#    ('10', 59153091),
#    ('11', 56242073),
#    ('12', 48598282),
#    ('13', 37947325),
#    ('14', 27541907),
#    ('15', 19356046),
#    ('16', 13630601),
#    ('17', 8810979),
#    ('18', 4262462),
#    ('19', 1227506),
#    ('20', 216751)]

# Create ASCII histograph plotter
from ascii_graph import Pyasciigraph
graph = Pyasciigraph()

# FAILS: Plot using zip expression assigned to histData
#------------------------------------------------------
for line in graph.graph( "Test" ,
      list( zip( BinMid.astype(str) , nDist ) ) ):
   print(line)
for line in graph.graph( "Test" , histData ): print(line)
#  Traceback (most recent call last):
#    Cell In[139], line 1
#      for line in graph.graph( "Test" , histData ): print(line)
#    File ~\AppData\Local\anaconda3\envs\py39\lib\site-packages\ascii_graph\__init__.py:399 in graph
#      san_data = self._sanitize_data(data)
#    File ~\AppData\Local\anaconda3\envs\py39\lib\site-packages\ascii_graph\__init__.py:378 in _sanitize_data
#      (self._sanitize_string(item[0]),
#    File ~\AppData\Local\anaconda3\envs\py39\lib\site-packages\ascii_graph\__init__.py:351 in _sanitize_string
#      return info
#  UnboundLocalError: local variable 'info' referenced before assignment

# SUCCEEDS: Assign pimitive literals to histData
#-----------------------------------------------
histData = [ ('1', 7083),
             ('2', 73485),
             ('3', 659204),
             ('4', 3511238),
             ('5', 10859771),
             ('6', 22162510),
             ('7', 34511661),
             ('8', 45891902),
             ('9', 55651178),
             ('10', 59153091),
             ('11', 56242073),
             ('12', 48598282),
             ('13', 37947325),
             ('14', 27541907),
             ('15', 19356046),
             ('16', 13630601),
             ('17', 8810979),
             ('18', 4262462),
             ('19', 1227506),
             ('20', 216751) ]
for line in graph.graph( "Test" , histData ): print(line)
# Test
# ###############################################################################
#                                                                        7083  1
#                                                                       73485  2
#                                                                      659204  3
# ███                                                                 3511238  4
# ███████████                                                        10859771  5
# ████████████████████████                                           22162510  6
# █████████████████████████████████████                              34511661  7
# ██████████████████████████████████████████████████                 45891902  8
# █████████████████████████████████████████████████████████████      55651178  9
# █████████████████████████████████████████████████████████████████  59153091  10
# █████████████████████████████████████████████████████████████      56242073  11
# █████████████████████████████████████████████████████              48598282  12
# █████████████████████████████████████████                          37947325  13
# ██████████████████████████████                                     27541907  14
# █████████████████████                                              19356046  15
# ██████████████                                                     13630601  16
# █████████                                                           8810979  17
# ████                                                                4262462  18
# █                                                                   1227506  19
#                                                                      216751  20
python numpy python-zip
1个回答
0
投票

看起来这些字符串的类型最终是

numpy.str_
而不是
str

>>> histData = list( zip( BinMid.astype(str) , nDist ) )
>>> print(type(histData[0][0]))
<class 'numpy.str_'>

与字面定义相比:

>>> histData2 = [('1', 7083), ('2', 73485)]
>>> print(type(histData2[0][0]))
<class 'str'>

我建议使用一种为您提供

str
对象的方法。

histData = list(zip(map(str, BinMid), nDist))

有了这个,我就可以从 NumPy 数组制作图表了。

© www.soinside.com 2019 - 2024. All rights reserved.