- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不太明白您应该如何传递参数以在 matplotlib 中创建水平条形图。我只是想模仿我在这个示例代码中看到的... https://pythonspot.com/matplotlib-bar-chart/
以及我在这篇 stackoverflow 帖子中看到的内容 How to plot multiple horizontal bars in one chart with matplotlib
现在我的代码如下:
import numpy as np
x_locs = np.arange(len(total_vals))
t_label_lst = ['Digital Learning Apps', 'News, Events, Daily', 'News on School Events', 'STEM Extracurriculars & School Programs', 'Hiring, STEM Workforce', 'Women in STEM', 'Activities and Projects Outside of the Classroom', 'Ambiguous', 'Ambiguous, STEM in College', 'Next Generation of Engineers', 'News, Events, Daily', 'Educational Policy and Higher Education, Reform', 'STEM Activities, Building, Arts, and Design', 'Engaging students with STEM using programming and robotics', 'Black Leaders in STEM', 'Next Generation of Engineers', 'Ambiguous', 'Astronomy, NASA', 'STEM workshops and summer camps', 'Competitions, Team Credit', 'Ambiguous, Technology Hashtags', 'Google Education', 'Good Job Today! Crediting Daily Activities and Work', 'Engaging students with STEM using programming and robotics', 'Environmental Science', 'Teachers, Public Schools In STEM', 'Ambiguous', 'Edtech Companies', 'Ambiguous, PHD Conversation', 'Ambiguous', 'Engaging students with STEM using programming and robotics', 'Ambiguous, Virtual Reality and Personalized learning mention', 'Ambiguous', 'Ambiguous', 'Ambiguous, #Autism hashtag has disproportionate weight']
print(x_locs)
total_vals = [23668, 13186, 10752, 10002, 9558, 9126, 8138, 7389, 7006, 6965, 6859, 6621, 6538, 5700, 5110, 5069, 4419, 4025, 3943, 3866, 3761, 3697, 3543, 3294, 3067, 2928, 2511, 2491, 2353, 2312, 2229, 2175, 2021, 1921, 1787]
positive_vals = [9941, 9306, 7595, 5935, 5913, 7488, 5258, 4905, 4026, 5242, 5557, 3225, 3530, 3055, 3300, 3503, 2461, 2199, 2074, 2379, 1665, 2274, 2250, 1674, 1523, 1533, 1241, 859, 1504, 1419, 1132, 1082, 805, 753, 580]
neutral_vals = [13727, 3880, 3157, 4067, 3645, 1638, 2880, 2484, 2980, 1723, 1302, 3396, 3008, 2645, 1810, 1566, 1958, 1826, 1869, 1487, 2096, 1423, 1293, 1620, 1544, 1395, 1270, 1632, 849, 893, 1097, 1093, 1216, 1168, 1207]
rects1 = ax.barh(x_locs, total_vals, width=.15, color='r', label="total tweet count")
# rects2 = ax.barh(positive_vals, width=.2, color = 'b', label="positive tweet count")
# rects3 = ax.barh(neutral_vals, width=.2, color='yellow', label="neutral tweet count")
ax.set(yticks=x_locs, yticklabels=t_label_lst, ylim=[0, len(x_locs)])
plt.show()
但这只会导致程序崩溃并显示以下错误消息:“TypeError: barh() 为参数‘width’获取了多个值”我什至不确定如果我设置宽度参数为 .15。
total_vals 包含 35 个计数,或我试图在 x 轴上绘制的频率。就像这些是我试图让我的酒吧反射(reflect)在高度方面的值(value)观。 positive_vals 和 neutral_vals 也包含 35 个计数。
x_locs 是我根据我在示例代码中看到的内容创建的一个变量,但它应该只是数字 0-34。这只是应该指示我要显示的 35 个条中的每一个。
同样让我感到困惑的是,当我删除 x_loc 时会发生什么。所以如果我只是做
rects1 = ax.barh(total_vals, width=.15, color='r', label="total tweet count")
我得到了这个 matplotlib 图,它似乎在图的 x 轴上绘制了我的“宽度”参数/使宽度参数成为 x 轴的限制。
我的 yticks 看起来它们实际上至少按照它们应该进行的顺序正确显示,但看起来宽度是在 x 轴上绘制或测量的内容......很明显,图表是空的.
我知道我的 yticklabels 现在长得可怕,我只是上传了这段代码,以便它可以重现。
此时我不太确定“y”参数实际上应该表示什么。文档说“每个条的 y 坐标”。我最初以为 y 参数应该只是我想显示的计数,但后来我看到“left”参数是“条形图左侧的 x 坐标”。
所以我把我的代码改成了
rects1 = ax.barh(y=x_locs, left=total_vals, width=.15, color='r', label="total tweet count")
这正确地改变了 y 轴,但它仍然给我一个空图。我不知道我的计数/条发生了什么,也不知道为什么它们根本不显示。
我实际上如何让条形图显示出来?我只是对这些水平条形图的参数实际工作方式有一些明显的困惑。
最佳答案
您实际上非常了解您的代码;您只是对 barh
的参数有些困惑。
首先,让我们弄清楚所需的参数是什么。
第一个位置参数是y
,它指的是每个类别 的y 坐标。因此,x_locs
是用词不当。这些可以按运行顺序轻松创建:第一个类别位于 y=0
,第二个类别位于 y=1
,依此类推。
接下来,您传递一个变量,如 total_vals
,还有 width
,并得到一个错误。
考虑一个条由两个方面定义,位置 和大小。由于所有条形都与图的左侧脊柱对齐,因此它们的 x 坐标相同,并且它们将仅由它们的 y 坐标定义,我们已经完成了这一点。
对于条形图,我们通常希望一个维度是动态的(表示某个数量的维度),而另一个维度对于所有条形图都是相同的。相同的是 height
,因为它等于条形的垂直尺寸。
另外一个动态维度,那么,就是width
,width
代表total_vals
,positive_vals
和 negative_vals
。因此,您收到该错误是因为您试图指定每个条的长度应该两次。
现在,让我们回到y_locs
。请记住,我们希望每个订单号有 3 个柱线,并排。这相当于说我们希望每个“类别”的条形图(total
、negative
和positive
)都进行轻微调整,否则它们会重叠。
例如,我们可以让 negative
的条保留在 y_loc
指定的位置,positive
的条向下移动 10像素,total
的像素为 20。这是一个实现细节;重要的是我们认识到需要这样的抵消。
将所有这些放在一起,我们得到:
import numpy as np
from matplotlib import pyplot as plt
fig, ax = plt.subplots(figsize=(6, 10))
t_label_lst = ['Digital Learning Apps', 'News, Events, Daily', 'News on School Events', 'STEM Extracurriculars & School Programs', 'Hiring, STEM Workforce', 'Women in STEM', 'Activities and Projects Outside of the Classroom', 'Ambiguous', 'Ambiguous, STEM in College', 'Next Generation of Engineers', 'News, Events, Daily', 'Educational Policy and Higher Education, Reform', 'STEM Activities, Building, Arts, and Design', 'Engaging students with STEM using programming and robotics', 'Black Leaders in STEM', 'Next Generation of Engineers', 'Ambiguous', 'Astronomy, NASA', 'STEM workshops and summer camps', 'Competitions, Team Credit', 'Ambiguous, Technology Hashtags', 'Google Education', 'Good Job Today! Crediting Daily Activities and Work', 'Engaging students with STEM using programming and robotics', 'Environmental Science', 'Teachers, Public Schools In STEM', 'Ambiguous', 'Edtech Companies', 'Ambiguous, PHD Conversation', 'Ambiguous', 'Engaging students with STEM using programming and robotics', 'Ambiguous, Virtual Reality and Personalized learning mention', 'Ambiguous', 'Ambiguous', 'Ambiguous, #Autism hashtag has disproportionate weight']
total_vals = [23668, 13186, 10752, 10002, 9558, 9126, 8138, 7389, 7006, 6965, 6859, 6621, 6538, 5700, 5110, 5069, 4419, 4025, 3943, 3866, 3761, 3697, 3543, 3294, 3067, 2928, 2511, 2491, 2353, 2312, 2229, 2175, 2021, 1921, 1787]
positive_vals = [9941, 9306, 7595, 5935, 5913, 7488, 5258, 4905, 4026, 5242, 5557, 3225, 3530, 3055, 3300, 3503, 2461, 2199, 2074, 2379, 1665, 2274, 2250, 1674, 1523, 1533, 1241, 859, 1504, 1419, 1132, 1082, 805, 753, 580]
neutral_vals = [13727, 3880, 3157, 4067, 3645, 1638, 2880, 2484, 2980, 1723, 1302, 3396, 3008, 2645, 1810, 1566, 1958, 1826, 1869, 1487, 2096, 1423, 1293, 1620, 1544, 1395, 1270, 1632, 849, 893, 1097, 1093, 1216, 1168, 1207]
bar_size = 0.25
padding = 0.25
y_locs = np.arange(len(total_vals)) * (bar_size * 3 + padding)
rects1 = ax.barh(y_locs, total_vals, align='edge', height=bar_size, color='r', label="total tweet count")
rects2 = ax.barh(y_locs + bar_size, positive_vals, align='edge', height=bar_size, color='b', label="positive tweet count")
rects3 = ax.barh(y_locs + 2 * bar_size, neutral_vals, align='edge', height=bar_size, color='yellow', label="neutral tweet count")
ax.set(yticks=x_locs, yticklabels=t_label_lst, ylim=[0 - padding, len(x_locs)])
关于python - 每个 ytick 有多个条形的水平条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55554459/
我正在使用seaborn 绘制热图。但如果 yticks 太多,其中一些将被自动隐藏。结果如下: 如您所见,yticks 只显示 1, 3, 5, 7.... 31, 33我怎样才能让seaborn或
下面是从 MultiIndex 数据框生成的 seaborn 热图: import numpy as np import pandas as pd import seaborn as sns year
我想绘制一些数据并在右侧添加一个 ytick,但是当我这样做时,左侧的刻度消失了,我想保留它。有人能帮助我吗 ?我看过其他帖子,但他们都在使用 ax.命令,我不熟悉这个,我只使用 plt.职能。 我使
我一直在尝试找到一种以表格形式显示 3 元素列表的方法。我真正关心的是绘制表格。我想为图中的每个 ylabel 绘制一个 1by3 表。 以下是我到目前为止所拥有的。如果我能让每个表实例都显示出来,我
我刚刚开始了解 Python 库 pandas 和 matplotlib。你能举例说明如何使用 matplotlib 生成与此类似的图吗: 在右侧的 y 轴上,列出了数据实例的名称。下面的 x 轴是与
这个问题在这里已经有了答案: How to remove relative shift in matplotlib axis (2 个答案) 关闭 8 年前。 我正在尝试从 pandas dataf
我是 matplotlib 的新手,正在处理图表,当我使用 plt.ticks 时,它不会显示我作为 np 数组提供的 yticks,而是在 y 轴上显示相同的旧图表值。 我尝试了与此相关的堆栈溢出问
我不太明白您应该如何传递参数以在 matplotlib 中创建水平条形图。我只是想模仿我在这个示例代码中看到的... https://pythonspot.com/matplotlib-bar-cha
我试图在条形图上绘制折线图,但刻度线和点的实际位置均未对齐。我希望它们能够保持一致。 (请注意,我将在另一侧类似地(但相反)绘制另一组数据,因此是子图。) 这是我到目前为止所拥有的 import
我偶然发现了 matlab 的 xticklabels 和 yticklabels 行为的不直观行为。我将 xticklabels 的输出存储到一个变量中,修改它,然后再次应用它并注意标签现在已经移动
我使用 matplotlib.pyplot 创建了一个子图。即使我使用以下方法将刻度标签设置为空: plt.xticks([ ]) plt.yticks([ ]) 如何删除这些内容?我是 Python
这是一个代码片段 tips = sns.load_dataset("tips") g = sns.FacetGrid(tips, col = 'time') g = g.map(plt.hist, "
我有一个包含 200 个键和值的 dict,可以生成此图。 我还计算了这些值的平均值并绘制了它。我希望平均值与线条颜色相同。我使用的代码是这样的: with open('path_to_json/va
Download Zip with signal.csv 我可以创建一个 psd 图,如下所示: import pandas as pd import matplotlib.pyplot as plt
我有一个多图图形,使用此命令(所有子图共享 x 和 y 轴): fig, axes = plt.subplots(nrows=1, ncols=4, sharex=True, sharey=True)
我在 pyplot 上有两个箱线图,我想将 yticks 从“1”和“2”更改为两个字符串“Post Index”和“Pre Index”。这将如何完成? import numpy as np imp
我已经完成了雷达图,看起来几乎是我想要的样子。但是,由于绘图上有很多值,我想修改 ylabels/yticks 的对齐方式。 我在给定角度的一行中创建具有正确值的 ylabels/yticks 没有问
我一直在尝试在 Matplotlib 上绘制数据,但我似乎有重叠的 YTicks。我不确定如何调整它们。 代码 import matplotlib.pyplot as plt data= [42704
我有一个根据此创建的数据透视表:Color mapping of data on a date vs time plot并用 imshow() 绘制它。我想使用数据透视表的索引和列作为 yticks
我在图中有三个轴,我想从所有轴中删除 xtick 和 ytick。我写了下面的代码,但它只适用于当前轴,而不是所有轴: set(gca,'xtick',[],'ytick',[]); 如何从所有轴上删
我是一名优秀的程序员,十分优秀!