- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python实现双轴组合图表柱状图和折线图的具体流程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
python绘制双轴组合的关键在plt库的twinx()函数,具体流程:
1.先建立坐标系,然后绘制主坐标轴上的图表; 。
2.再调用plt.twinx()方法; 。
3.最后绘制次坐标轴图表.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
import
cx_oracle
import
xlrd
import
xlwt
import
matplotlib.pyplot as plt
import
numpy as np
from
matplotlib.ticker
import
funcformatter
plt.rcparams[
'font.sans-serif'
]
=
[
'simhei'
]
plt.rcparams[
'axes.unicode_minus'
]
=
false
#设置坐标轴数值以百分比(%)显示函数
def
to_percent(temp, position):
return
'%1.0f'
%
(
1
*
temp)
+
'%'
#字体设置
font2
=
{
'family'
:
'times new roman'
,
'weight'
:
'normal'
,
'size'
:
25
,
}
conn
=
cx_oracle.connect(
'用户名/密码@ip:端口/数据库'
)
c
=
conn.cursor()
#sql查询语句,多行用()括起来
sql_detail
=
(
"select substr(date1,6,10)date1,round(avg(r_qty))r_qty,round(avg(e_qty))e_qty,"
"round(avg(r_qty)/avg(e_qty),2)*100 userate,round(avg(uptime),2)*100 uptime from 表tp "
"tp where 条件 "
"group by date1 order by date1 "
)
x
=
c.execute(sql_detail)
#获取sql查询数据
data
=
x.fetchall()
#print(data)
#新建excel保存数据
xl
=
xlwt.workbook()
ws
=
xl.add_sheet(
"robot 30 days move "
)
#ws.write_merge(0,1,0,4,"robot_30_days_move")
for
i,item
in
enumerate
(data):
for
j,val
in
enumerate
(item):
ws.write(i,j,val)
xl.save(
"e:\\robot_30_days_move.xls"
)
#读取excel数据
data1
=
xlrd.open_workbook(
"e:\\robot_30_days_move.xls"
)
sheet1
=
data1.sheet_by_index(
0
)
date1
=
sheet1.col_values(
0
)
r_qty
=
sheet1.col_values(
1
)
e_qty
=
sheet1.col_values(
2
)
userate
=
sheet1.col_values(
3
)
uptime
=
sheet1.col_values(
4
)
#空值处理
for
a
in
r_qty:
if
a
=
=
'':
a
=
0
for
a
in
e_qty:
if
a
=
=
'':
a
=
0
for
a
in
userate:
if
a
=
=
'':
a
=
0
for
a
in
uptime:
if
a
=
=
'':
a
=
0
#将list元素str转int类型
r_qty
=
list
(
map
(
int
, r_qty))
e_qty
=
list
(
map
(
int
, e_qty))
userate
=
list
(
map
(
int
, userate))
uptime
=
list
(
map
(
int
, uptime))
#添加平均值mean求平均
r_qty.append(
int
(np.mean(r_qty)))
e_qty.append(
int
(np.mean(e_qty)))
userate.append(
int
(np.mean(userate)))
uptime.append(
int
(np.mean(uptime)))
date1.append(
'avg'
)
#x轴坐标
x
=
np.arange(
len
(date1))
bar_width
=
0.35
plt.figure(
1
,figsize
=
(
19
,
10
))
#绘制主坐标轴-柱状图
plt.bar(np.arange(
len
(date1)),r_qty,label
=
'rbt_move'
,align
=
'center'
,alpha
=
0.8
,color
=
'blue'
,width
=
bar_width)
plt.bar(np.arange(
len
(date1))
+
bar_width,e_qty,label
=
'eqp_move'
,align
=
'center'
,alpha
=
0.8
,color
=
'orange'
,width
=
bar_width)
#设置主坐标轴参数
plt.xlabel('')
plt.ylabel(
'move'
,fontsize
=
18
)
plt.legend(loc
=
1
, bbox_to_anchor
=
(
0
,
0.97
),borderaxespad
=
0.
)
#plt.legend(loc='upper left')
for
x,y
in
enumerate
(r_qty):
plt.text(x,y
+
100
,
'%s'
%
y,ha
=
'center'
,va
=
'bottom'
)
for
x,y
in
enumerate
(e_qty):
plt.text(x
+
bar_width,y
+
100
,
'%s'
%
y,ha
=
'left'
,va
=
'top'
)
plt.ylim([
0
,
8000
])
#调用plt.twinx()后可绘制次坐标轴
plt.twinx()
#次坐标轴参考线
target1
=
[
90
]
*
len
(date1)
target2
=
[
80
]
*
len
(date1)
x
=
list
(
range
(
len
(date1)))
plt.xticks(x,date1,rotation
=
45
)
#绘制次坐标轴-折线图
plt.plot(np.arange(
len
(date1)),userate,label
=
'use_rate'
,color
=
'green'
,linewidth
=
1
,linestyle
=
'solid'
,marker
=
'o'
,markersize
=
3
)
plt.plot(np.arange(
len
(date1)),uptime,label
=
'uptime'
,color
=
'red'
,linewidth
=
1
,linestyle
=
'--'
,marker
=
'o'
,markersize
=
3
)
plt.plot(np.arange(
len
(date1)),target1,label
=
'90%target'
,color
=
'black'
,linewidth
=
1
,linestyle
=
'dashdot'
)
plt.plot(np.arange(
len
(date1)),target2,label
=
'80%target'
,color
=
'black'
,linewidth
=
1
,linestyle
=
'dashdot'
)
#次坐标轴刻度百分比显示
plt.gca().yaxis.set_major_formatter(funcformatter(to_percent))
plt.xlabel('')
plt.ylabel(
'rate'
,fontsize
=
18
)
#图列
plt.legend(loc
=
2
, bbox_to_anchor
=
(
1.01
,
0.97
),borderaxespad
=
0.
)
plt.ylim([
0
,
100
])
for
x,y
in
enumerate
(userate):
plt.text(x,y
-
1
,
'%s'
%
y,ha
=
'right'
,va
=
'bottom'
,fontsize
=
14
)
for
x,y
in
enumerate
(uptime):
plt.text(x,y
+
1
,
'%s'
%
y,ha
=
'left'
,va
=
'top'
,fontsize
=
14
)
plt.title(
"robot 30 days move"
)
#图表table显示plt.table()
listdata
=
[r_qty]
+
[e_qty]
+
[userate]
+
[uptime]
#数据
table_row
=
[
'rbt_move'
,
'eqp_move'
,
'use_rate(%)'
,
'uptime(%)'
]
#行标签
table_col
=
date1
#列标签
print
(listdata)
print
(table_row)
print
(table_col)
the_table
=
plt.table(celltext
=
listdata,cellloc
=
'center'
,rowlabels
=
table_row,collabels
=
table_col,rowloc
=
'center'
,colloc
=
'center'
)
#table参数设置-字体大小太小,自己设置
the_table.auto_set_font_size(false)
the_table.set_fontsize(
12
)
#table参数设置-改变表内字体显示比例,没有会溢出到表格线外面
the_table.scale(
1
,
3
)
#plt.show()
plt.savefig(r
"e:\\robot_30_days_move.png"
,bbox_inches
=
'tight'
)
#关闭sql连接
c.close()
conn.close()
|
结果显示:
到此这篇关于python实现双轴组合图表柱状图和折线图的具体流程的文章就介绍到这了,更多相关python柱状图和折线图内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/bellin124/p/14610744.html 。
最后此篇关于Python实现双轴组合图表柱状图和折线图的具体流程的文章就讲到这里了,如果你想了解更多关于Python实现双轴组合图表柱状图和折线图的具体流程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有在double-y-axis中制作的Excel图表。在Excel中,它仅需要基本技能。我想做的是使用ggplot2中的R库复制此图表。 我已经做到了,但是我需要在2nd-y-axis上绘制Resp
我使用 jquery flot 来显示图表...我想显示双 x 轴...两者都有相同的值..我该如何显示这个?请帮忙 问候尼桑斯 最佳答案 请检查代码,这是插件示例的来源,也请检查链接 http://
我打开这个问题有三个原因:第一,用ggplot重新打开双轴讨论。其次,询问是否有一种非折磨性的通用方法来做到这一点。最后,就解决方法寻求您的帮助。 我意识到有很多关于如何向 ggplot 添加辅助轴的
我正在尝试使用两条线创建一个图形,其中包含来自同一维度的两个过滤器。 我有一个包含 20 多个值的维度。我希望一行显示仅基于选定值之一的数据,另一行显示不包括相同值的行。 我尝试了以下方法: - 创建
我正在使用 matplotlib 创建对数对数图。如下图所示,默认刻度选择不当(充其量);右边的 y 轴甚至根本没有任何东西(它在线性等效中有)并且两个 x 轴都只有一个。 有没有办法通过标签获得合理
我正在尝试生成 highcharts 的双轴、折线图和柱形图。我尝试了 stackoverflows 的建议,但我找不到合适的解决方案。我的数据格式正确,但图表未生成显示空白。我想要这种类型的 [链接
我想通过调用本地 webService 来显示 HighCharts 双轴图表,该服务返回 Json(下面给出的示例)。 HighChart 应绘制以下数据点: y 轴左:绘制“运动” y 轴右:绘制
通常两个 y 轴用不同的颜色分开,如下例所示。 对于出版物来说,通常需要保持其可区分性,即使它是黑白打印的。 这通常是通过围绕一条线绘制圆圈来完成的,这些圆圈带有一个指向相应轴方向的箭头。 如何使用
我似乎无法为所有四行设置单独的线条颜色。当我使用线条时: plot.getRenderer().setSeriesPaint(0, new Color(0x00, 0xFF, 0x00)); plot
我是一名优秀的程序员,十分优秀!