x = np.arange(1,6) y1 = np.array([5,4,7,2,9]) y2 = np.array([3,5,2,4,10]) y3 = np.array([3,4,6,2,5])在绘制堆叠柱状图时如何从y1、y2、y3中取数
时间: 2024-10-16 07:16:36 浏览: 44
在Python中,你可以使用Matplotlib库中的`plt.bar()`函数创建堆叠柱状图。给定`x`作为共享的x轴数据,你需要将每个`y`数组作为单独的一组数据传递进去。对于`y1`, `y2`, 和 `y3`,你可以这样操作:
```python
import matplotlib.pyplot as plt
x = np.arange(1, 6)
y1 = np.array([5, 4, 7, 2, 9])
y2 = np.array([3, 5, 2, 4, 10])
y3 = np.array([3, 4, 6, 2, 5])
# 创建堆叠柱状图
plt.bar(x, y1, label='Series 1') # 第一组数据
plt.bar(x, y2, bottom=y1, label='Series 2') # 第二组数据,bottom参数用于设置前一层的高度
plt.bar(x, y3, bottom=np.add(y1, y2), label='Series 3') # 第三组数据,bottom参数等于前两层高度之和
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Stacked Bar Chart')
plt.legend()
plt.show()
```
这将会画出三个系列堆积在一起的柱状图。
相关问题
import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False x = np.arange(3) y1 = np.array([61.8, 42.8, 48.0]) y2 = np.array([32.9, 12.5, 13.3]) bar_width = 0.3 plt.bar(x, y1, width=bar_width, alpha=0.8, color='skyblue', label='获得offer比例') plt.bar(x + bar_width, y2, width=bar_width, alpha=0.8, color='pink', label='签约比例') plt.title('不同院校求职毕业生获得offer与签约比例') plt.xlabel('学历') plt.ylabel('签约率') plt.xticks(x + bar_width/2, ['双一流院校', '普通本科院校', '专科院校']) plt.legend(loc='upper right') plt.show()给这个图片添加数据标签
可以使用 plt.text() 函数在每个柱状图上添加数据标签,代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
x = np.arange(3)
y1 = np.array([61.8, 42.8, 48.0])
y2 = np.array([32.9, 12.5, 13.3])
bar_width = 0.3
plt.bar(x, y1, width=bar_width, alpha=0.8, color='skyblue', label='获得offer比例')
plt.bar(x + bar_width, y2, width=bar_width, alpha=0.8, color='pink', label='签约比例')
plt.title('不同院校求职毕业生获得offer与签约比例')
plt.xlabel('学历')
plt.ylabel('签约率')
plt.xticks(x + bar_width/2, ['双一流院校', '普通本科院校', '专科院校'])
plt.legend(loc='upper right')
# 添加数据标签
for i, v in enumerate(y1):
plt.text(i - 0.1, v + 1, str(v) + '%', color='black', fontsize=12)
for i, v in enumerate(y2):
plt.text(i + bar_width - 0.1, v + 1, str(v) + '%', color='black', fontsize=12)
plt.show()
```
运行上述代码,就可以得到带有数据标签的柱状图了。
import numpy as np # 定义三角形节点坐标和单元节点关系 nodes = np.array([[0, 0], [0, 1], [1, 0]]) elems = np.array([[0, 1, 2]]) # 定义材料的弹性模量和泊松比 E = 210e9 nu = 0.3 # 计算材料的弹性矩阵 D = E / (1 - nu ** 2) * np.array([[1, nu, 0], [nu, 1, 0], [0, 0, (1 - nu) / 2]]) # 构造三角形常应变单元的刚度矩阵 def get_element_stiffness_matrix(elem): x1, y1 = nodes[elem[0]] x2, y2 = nodes[elem[1]] x3, y3 = nodes[elem[2]] A = 0.5 * abs(x1 * y2 + x2 * y3 + x3 * y1 - x1 * y3 - x2 * y1 - x3 * y2) B = np.array([[y2 - y3, 0, y3 - y1, 0, y1 - y2, 0], [0, x3 - x2, 0, x1 - x3, 0, x2 - x1], [x3 - x2, y2 - y3, x1 - x3, y3 - y1, x2 - x1, y1 - y2]]) return A * np.linalg.inv(B.T @ D @ B) # 构造整体刚度矩阵 num_nodes = nodes.shape[0] num_elems = elems.shape[0] K = np.zeros((2 * num_nodes, 2 * num_nodes)) for i in range(num_elems): elem = elems[i] ke = get_element_stiffness_matrix(elem) for r in range(3): for c in range(3): K[2 * elem[r], 2 * elem[c]] += ke[2 * r, 2 * c] K[2 * elem[r], 2 * elem[c] + 1] += ke[2 * r, 2 * c + 1] K[2 * elem[r] + 1, 2 * elem[c]] += ke[2 * r + 1, 2 * c] K[2 * elem[r] + 1, 2 * elem[c] + 1] += ke[2 * r + 1, 2 * c + 1] # 定义边界条件 fixed_nodes = [0] fixed_dofs = [2 * i for i in fixed_nodes] free_dofs = [i for i in range(2 * num_nodes) if i not in fixed_dofs] # 定义外力 F = np.zeros(2 * num_nodes) F[2] = -5000 # 求解位移场 K_ff = K[np.ix_(free_dofs, free_dofs)] F_f = F[free_dofs] u_f = np.linalg.solve(K_ff, F_f) u = np.zeros(2 * num_nodes) u[free_dofs] = u_f # 输出结果 print("位移场:") print(u.reshape(-1, 2)) print("应力场:") for i in range(num_elems): x1, y1 = nodes[elem[0]] x2, y2 = nodes[elem[1]] x3, y3 = nodes[elem[2]] elem = elems[i] u_e = u[2 * elem] B_e = np.array([[y2 - y3, 0, y3 - y1, 0, y1 - y2, 0], [0, x3 - x2, 0, x1 - x3, 0, x2 - x1], [x3 - x2, y2 - y3, x1 - x3, y3 - y1, x2 - x1, y1 - y2]]) epsilon_e = B_e @ u_e sigma_e = D @ epsilon_e print(sigma_e)这段代码中的定义边界条件和定义外力
定义边界条件的代码如下:
fixed_nodes = [0]
fixed_dofs = [2 * i for i in fixed_nodes]
其中,fixed_nodes表示被固定的节点的编号,fixed_dofs表示这些节点在整体位移场中的自由度编号,其中乘以2是因为每个节点有两个自由度(x和y方向)。这里的代码表示将节点0固定。
定义外力的代码如下:
F = np.zeros(2 * num_nodes)
F[2] = -5000
其中,F表示整体外力向量,num_nodes表示节点总数,这里的代码表示将节点2处施加一个向下的力5000N。同样乘以2是因为每个节点有两个自由度(x和y方向)。
阅读全文
相关推荐














