- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有经过热处理循环的 Material 的机械性能数据。条形图按每个循环分组,具有三个属性:屈服、拉伸(stretch)和伸长率。屈服强度和抗拉强度共享同一 y 轴,而伸长率位于第二个 y 轴上。屈服强度和抗拉强度具有最大值,而伸长率具有最小值。我不希望将引用线用于最小值和最大值,而是希望将条形图填充为最大最小值的百分比。
我正在使用 pandas 创建带有 .plot 的数据框,同时使用 color=None 和 edgecolor 制作“空”条。但是,edgecolor 设置每个组的颜色。
我尝试过孵化和填充,但一直没能弄清楚如何只填充其中的一部分。
我也不希望 df["y_norm"] 出现在每个组中。此列仅包含栏应填充颜色的比例。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from io import StringIO
s=StringIO(""" Yield UTS Elongation
T1 10.5 25.3 30.2
T2 10.8 26.3 30.3
T3 11.0 26.5 30.2
T4 11.5 27.2 30.4
T5 20.1 30.2 22.3
T6 24.7 31.2 19.0
T7 19.0 27.1 19.6
T8 12.2 21.7 23.4
T9 8.00 18.3 31.4""")
Ymax=float(16.0) #Yield strength maximum limit
UTSmax=float(22.0) #Ultimate Tensile Strengh maximum limit
Elmin=float(22.0) #Percent Elongation minimum limit
df = pd.read_csv(s, index_col=0, delimiter=' ',skipinitialspace=True)
df_scale=pd.DataFrame()
df_scale["y_norm"]=round(Ymax/df["Yield"],2)
df_scale["y_norm"]=df_scale["y_norm"].where(df_scale["y_norm"] < 1, 1)
#--progres bar for Ultimate Tensile Strength Maximum Limit-----
df_scale["T_norm"]=round(UTSmax/df["UTS"],2)
df_scale["T_norm"]=df_scale["T_norm"].where(df_scale["T_norm"]<1,1)
#--progres bar for Elongation Minimum Limit-----
df_scale["El_norm"]=round(Elmin/df["Elongation"],2)
df_scale["El_norm"]=df_scale["El_norm"].where(df_scale["El_norm"]>1,1)
df_scale["El_norm"]=df_scale["El_norm"].where(df_scale["El_norm"]
<1,abs(df_scale["El_norm"]-2))
M_props=df.plot(kind="bar",secondary_y="Elongation",rot=0,
edgecolor="rgb",color="None")
M_props.set_ylabel('KSI',rotation=0)
M_props.right_ax.set_ylabel('% El')
M_props.right_ax.set_ylim([10,40])
plt.show()
结果应该只显示最后两组,T8 和 T9,作为完全填充的条。
最佳答案
IIUC,你需要再次乘以y_norm
并重新绘制:
# columns to draw:
col2draw = df.columns[:-1]
fig, M_props = plt.subplots(figsize=(10,6))
# draw the full-length empty bars
df[col2draw].plot(kind="bar",secondary_y="Elongation",
rot=0, edgecolor="k", ax=M_props,
color="None",
legend=False)
# fill the bars based on y_norm
(df[col2draw].apply(lambda x: x*df['y_norm'])
.plot(kind="bar",
secondary_y="Elongation",
rot=0,
ax=M_props)
)
M_props.set_ylabel('KSI',rotation=0)
M_props.right_ax.set_ylabel('% El')
M_props.right_ax.set_ylim([10,40])
plt.show()
输出:
更新:如果列的比例不同:
# create a scale dataframe, note the columns and index
df_scale = pd.DataFrame(columns=df.columns,
index=df.index)
# compute the scales, here we assign it randomly with seed
np.random.seed(1)
df_scale = np.random.uniform(0.5,1,(len(df),3))
# plot as previously
fig, M_props = plt.subplots(figsize=(10,6))
# draw the full-length empty bars
df.plot(kind="bar",secondary_y="Elongation",
rot=0, edgecolor="k", ax=M_props,
color="None",
legend=False)
# fill the bars based on y_norm
((df*df_scale).plot(kind="bar",
secondary_y="Elongation",
ax=M_props)
)
M_props.set_ylabel('KSI',rotation=0)
M_props.right_ax.set_ylabel('% El')
M_props.right_ax.set_ylim([10,40])
plt.show()
关于python - 创建一个条形图,其条形是相对于最大值或最小值的填充进度百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436360/
我想在我的 android 应用程序中实现一个反馈/评级图表。(就像当你打开 google play 并检查应用程序的反馈时,有一个来自投票它的用户的彩色图表)任何人都可以帮助我如何开始那个?感谢您提
我正在尝试使用 LaTeX 制作条形图。到目前为止我一直不成功,所以任何人都可以帮助我,也许是最近项目的副本?如何使用 pstricks 制作条形图?我会很感激最简单的解决方案,因为我最近才开始使用
我有一个包含 6 个事件及其发生时间跨度的 csv 表。我的变量是开始日期、结束日期和事件 ID。我打算创建一个水平直方图/条形图可视化来显示时间范围,即某些类型的事件持续了多长时间。 X 轴应该有多
我想制作可以指定条形最小值的条形图(很像盒须图中的盒子)。条形图可以做到吗?我怀疑答案在 ggplot 中,但我找不到示例。 这是一些数据: X Jan F
我想使用以下数据来创建可视化: > dput(data) structure(c(1264L, 2190L, 2601L, 1441L, 1129L, 2552L, 1820L, 306L,
我有一个包含正值和负值的数据框。我想显示一个显示两个条形的条形图,一个条形显示正值的百分比,另一个条形图显示负值的百分比。 dummy = pd.DataFrame({'A' : [-4, -3, -
我正在尝试在栏中插入自定义文本,我搜索了很多线程,但仍然没有得到任何解决方案。然后我想减小 y 轴的步长。我已附上我的代码。 jQuery( document ).ready(function() {
我正在使用 pandas 来创建条形图。这是一个例子: df=pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd']) df.
我想在python中制作一个分类图来表示几个变量的范围。我想也许我会使用条形图并为条形设置范围。这是我的条形图 import matplotlib.pyplot as plt import numpy
我有一个显示 3 个条形的堆叠百分比条形图。 JSFiddle:https://jsfiddle.net/Lr0bszj6/ 由于某种原因,条形之间有很多空间并且没有与标签对齐(只有中间一个)。 设置
我正在尝试使用 aChartEngine 将 GPS 数据(正在查看或正在使用的卫星)显示为条形图,但我没有在此 View 中显示任何数据。这是我的代码,所以你能告诉我我犯了什么错误吗? public
我正在使用 this chart implementation . 但是,它分散了我的数据,而不是相互堆叠。 我想在 1970 年堆叠我的第一个数组,在 1975 年堆叠第二个数组。换句话说,我希望有
我正在尝试用不同颜色为条形图中的各个条形着色,比如蓝色表示正,红色表示负。我在互联网上找不到任何有用的东西。我在下面的代码中发现每个条形图都根据第一个条形图的值着色,而不是为每个条形图单独设置颜色:
我刚刚转移到 pandas 0.20/matplotlib 2.0 python 3.6。 (共构成以下版本)。我用 pandas 来绘制条形图,因为 matplotlib 的级别总是太低。着色列的行
我正在尝试制作一个图,其中 x 轴是时间,y 轴是一个条形图,其中的条形图覆盖特定时间段,如下所示: ______________
我有一些非常基本的代码,它可以正常工作,除了所有内容都与顶部对齐...理想情况下,条形图应与底部对齐。我想我可以使用固定定位,因为尺寸是 50px x 50px 的平方,但我更喜欢“固定”少一点的东西
这是我用来 Dim ejex As String, ejey As String Dim graficos As String Worksheets("Sheet1").Activate ejex =
我有一个生成如下条形图的 gnuplot 脚本: 输入数据位于具有多列的文件中,每一列最终都构成图表中的一个集群(示例中显示了 2 个集群)。每个文件都构成图表中的一个条形(示例中有 9 个)。每个文
我正在为我的数据 movies 使用库 ggplot2movies 请记住,我指的是 mpaa 评级和用户评级,这是两个不同的事物。如果您不想加载 ggplot2movies 库,这里是相关数据的示例
有没有一种简单的方法可以使用Pandas DataFrame.plot(kind='bar')方法按列名指定条形颜色? 我有一个脚本,可以从目录中的几个不同数据文件生成多个DataFrame。例如,它
我是一名优秀的程序员,十分优秀!