Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in
Toggle navigation
F
fund_report
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
彭熊
fund_report
Commits
148c8e8d
Commit
148c8e8d
authored
Nov 23, 2020
by
pengxiong@wealthgrow.cn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
月度回报表现图
贡献分解图 个基点评图 组合对比图
parent
3ea6cf3d
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
193 additions
and
26 deletions
+193
-26
draw.py
app/utils/draw.py
+190
-23
html_to_pdf.py
app/utils/html_to_pdf.py
+3
-3
No files found.
app/utils/draw.py
View file @
148c8e8d
...
...
@@ -13,25 +13,47 @@ from matplotlib import ticker
from
matplotlib.ticker
import
FuncFormatter
from
matplotlib.font_manager
import
FontProperties
# 中文字体初始化
plt
.
rcParams
[
'font.sans-serif'
]
=
[
'Heiti TC'
]
def
to_percent
(
temp
,
position
):
return
'
%1.0
f'
%
temp
+
'
%
'
def
draw_stacked_column_chart
(
product_list
,
cumulative
):
"""堆叠柱状图"""
def
draw_month_return_chart
(
xlabels
,
product_list
,
cumulative
):
"""月度回报表现图"""
# plt.title('Scores by group and gender')
# plt.ylabel('Scores')
figsize
=
(
20
,
12
)
# 标签文字大小
fontsize
=
20
# 初始化
fig
=
plt
.
figure
(
figsize
=
(
12
,
8
)
)
fig
=
plt
.
figure
(
figsize
=
figsize
)
ax1
=
fig
.
add_subplot
()
ax2
=
ax1
.
twin
y
()
ax2
=
ax1
.
twin
x
()
max_x_count
=
max
([
x
[
'data'
]
.
size
for
x
in
product_list
])
loc
=
np
.
arange
(
max_x_count
)
# the x locations for the groups
width
=
0.35
# the width of the bars: can also be len(x) sequence
color_list
=
[
'#222A77'
,
'#6C71AA'
,
'#E1BC95'
,
'#
102A77'
,
'#6CB1AA'
,
'#CCBC95
'
]
color_list
=
[
'#222A77'
,
'#6C71AA'
,
'#E1BC95'
,
'#
F9DBB8
'
]
# 堆叠柱状图
# 坐标轴
ax1
.
tick_params
(
labelsize
=
fontsize
)
ax2
.
tick_params
(
labelsize
=
fontsize
)
# 坐标轴颜色
ax2
.
tick_params
(
axis
=
'y'
,
colors
=
'#C6A774'
)
ax1
.
set_xticks
(
loc
)
ax1
.
set_xticklabels
(
xlabels
)
ax1
.
yaxis
.
set_major_formatter
(
FuncFormatter
(
to_percent
))
ax2
.
yaxis
.
set_major_formatter
(
FuncFormatter
(
to_percent
))
temp_rate
=
np
.
zeros
(
max_x_count
)
for
i
in
range
(
len
(
product_list
)):
temp_rate
+=
product_list
[
i
][
'data'
]
max_rate
=
np
.
max
(
np
.
hstack
((
temp_rate
,
cumulative
[
'data'
])))
ax2
.
set_ylim
(
0
,
max_rate
+
15
)
# 柱状图
prod_legend
=
[]
for
i
in
range
(
len
(
product_list
)):
ax
=
None
...
...
@@ -41,35 +63,180 @@ def draw_stacked_column_chart(product_list, cumulative):
else
:
for
j
in
range
(
i
):
bottom
=
bottom
+
product_list
[
j
][
'data'
]
ax
=
ax1
.
bar
(
loc
,
product_list
[
i
][
'data'
],
width
,
bottom
=
bottom
,
color
=
color_list
[
i
],
alpha
=
0.8
)
if
i
<
len
(
color_list
):
ax
=
ax1
.
bar
(
loc
,
product_list
[
i
][
'data'
],
width
,
bottom
=
bottom
,
color
=
color_list
[
i
],
alpha
=
0.8
)
else
:
ax
=
ax1
.
bar
(
loc
,
product_list
[
i
][
'data'
],
width
,
bottom
=
bottom
,
alpha
=
0.8
)
prod_legend
.
append
(
ax
[
0
])
ax1
.
legend
(
prod_legend
,
[
prod
[
'name'
]
for
prod
in
product_list
],
loc
=
'upper left'
,
fontsize
=
fontsize
)
# 画折线图
ax2
.
plot
(
loc
,
cumulative
[
'data'
],
color
=
'#C6A774'
,
marker
=
''
,
linewidth
=
3
,
label
=
cumulative
[
'name'
])
ax2
.
legend
(
loc
=
'upper center'
,
fontsize
=
fontsize
)
plt
.
show
()
def
draw_contribution_chart
(
xlabels
,
product_list
,
cumulative
):
"""贡献分解图"""
# plt.title('Scores by group and gender')
# plt.ylabel('Scores')
figsize
=
(
20
,
12
)
# 标签文字大小
fontsize
=
22
# 初始化
fig
=
plt
.
figure
(
figsize
=
figsize
)
ax1
=
fig
.
add_subplot
()
ax2
=
ax1
.
twiny
()
max_x_count
=
max
([
x
[
'data'
]
.
size
for
x
in
product_list
])
loc
=
np
.
arange
(
max_x_count
)
# the x locations for the groups
width
=
0.35
# the width of the bars: can also be len(x) sequence
color_list
=
[
'#222A77'
,
'#6C71AA'
,
'#E1BC95'
,
'#F9DBB8'
]
# 坐标轴
ax1
.
tick_params
(
labelsize
=
fontsize
)
ax1
.
set_xticks
(
loc
)
ax1
.
set_xticklabels
((
'G1'
,
'G2'
,
'G3'
,
'G4'
,
'G5'
))
plt
.
gca
()
.
yaxis
.
set_major_formatter
(
FuncFormatter
(
to_percent
))
ax1
.
legend
(
prod_legend
,
[
prod
[
'name'
]
for
prod
in
product_list
],
bbox_to_anchor
=
(
0.7
,
-
0.1
),
ncol
=
4
)
# 画折线图
# 最大收益
ax1
.
set_xticklabels
(
xlabels
)
ax1
.
yaxis
.
set_major_formatter
(
FuncFormatter
(
to_percent
))
temp_rate
=
np
.
zeros
(
max_x_count
)
for
i
in
range
(
len
(
product_list
)):
temp_rate
+=
product_list
[
i
][
'data'
]
max_rate
=
np
.
max
(
np
.
hstack
((
temp_rate
,
cumulative
[
'data'
])))
ax2
.
set_xticks
([])
ax2
.
set_ylim
(
0
,
max_rate
+
10
)
# 堆叠柱状图
prod_legend
=
[]
for
i
in
range
(
len
(
product_list
)):
ax
=
None
bottom
=
np
.
zeros
(
max_x_count
)
if
i
==
0
:
ax
=
ax1
.
bar
(
loc
,
product_list
[
i
][
'data'
],
width
,
color
=
color_list
[
i
],
alpha
=
0.8
)
else
:
for
j
in
range
(
i
):
bottom
=
bottom
+
product_list
[
j
][
'data'
]
if
i
<
len
(
color_list
):
ax
=
ax1
.
bar
(
loc
,
product_list
[
i
][
'data'
],
width
,
bottom
=
bottom
,
color
=
color_list
[
i
],
alpha
=
0.8
)
else
:
ax
=
ax1
.
bar
(
loc
,
product_list
[
i
][
'data'
],
width
,
bottom
=
bottom
,
alpha
=
0.8
)
prod_legend
.
append
(
ax
[
0
])
ax1
.
legend
(
prod_legend
,
[
prod
[
'name'
]
for
prod
in
product_list
],
bbox_to_anchor
=
(
0.8
,
-
0.1
),
ncol
=
4
,
fontsize
=
fontsize
)
# 画折线图
ax2
.
plot
(
loc
,
cumulative
[
'data'
],
color
=
'#C6A774'
,
marker
=
''
,
linewidth
=
3
,
label
=
cumulative
[
'name'
])
ax2
.
legend
(
loc
=
'upper left'
)
ax2
.
legend
(
loc
=
'upper left'
,
fontsize
=
fontsize
)
plt
.
show
()
def
draw_comment_chart
(
xlabels
,
source_prod
,
target_prod
):
"""个基点评图"""
figsize
=
(
20
,
12
)
# 标签文字大小
fontsize
=
22
# 初始化
fig
=
plt
.
figure
(
figsize
=
figsize
)
ax1
=
fig
.
add_subplot
()
ax2
=
ax1
.
twiny
()
# ax = plt.gca() # gca:get current axis得到当前轴
# ax.spines['bottom'].set_position(('data', 0)) # data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置
product_list
=
[
source_prod
,
target_prod
]
max_x_count
=
max
([
x
[
'data'
]
.
size
for
x
in
product_list
])
loc
=
np
.
arange
(
max_x_count
)
# the x locations for the groups
# 坐标轴
ax1
.
tick_params
(
labelsize
=
fontsize
)
ax2
.
tick_params
(
labelsize
=
fontsize
)
ax1
.
set_xticks
(
loc
)
ax1
.
set_xticklabels
(
xlabels
)
ax1
.
yaxis
.
set_major_formatter
(
FuncFormatter
(
to_percent
))
max_rate
=
np
.
max
(
np
.
hstack
((
source_prod
[
'data'
],
target_prod
[
'data'
])))
ax2
.
set_xticks
([])
# 个基折线图
ax1
.
plot
(
loc
,
source_prod
[
'data'
],
color
=
'#C6A774'
,
marker
=
''
,
linewidth
=
3
,
label
=
source_prod
[
'name'
])
ax1
.
legend
(
loc
=
'upper left'
,
fontsize
=
fontsize
)
# 指数折线图
ax2
.
plot
(
loc
,
target_prod
[
'data'
],
color
=
'black'
,
marker
=
''
,
linewidth
=
3
,
label
=
target_prod
[
'name'
])
ax2
.
legend
(
loc
=
'upper center'
,
fontsize
=
fontsize
)
plt
.
show
()
def
draw_combination_chart
(
xlabels
,
new_combination
,
origin_combination
,
index
):
"""组合对比图"""
figsize
=
(
20
,
12
)
# 标签文字大小
fontsize
=
22
# 初始化
fig
=
plt
.
figure
(
figsize
=
figsize
)
ax1
=
fig
.
add_subplot
()
ax2
=
ax1
.
twiny
()
ax3
=
ax1
.
twiny
()
# ax = plt.gca() # gca:get current axis得到当前轴
# ax.spines['bottom'].set_position(('data', 0)) # data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置
product_list
=
[
origin_combination
,
new_combination
,
index
]
max_x_count
=
max
([
x
[
'data'
]
.
size
for
x
in
product_list
])
loc
=
np
.
arange
(
max_x_count
)
# the x locations for the groups
# 坐标轴
ax1
.
tick_params
(
labelsize
=
fontsize
)
ax2
.
tick_params
(
labelsize
=
fontsize
)
ax3
.
tick_params
(
labelsize
=
fontsize
)
ax1
.
set_xticks
(
loc
)
ax1
.
set_xticklabels
(
xlabels
)
ax1
.
yaxis
.
set_major_formatter
(
FuncFormatter
(
to_percent
))
ax2
.
set_xticks
([])
ax3
.
set_xticks
([])
# 新组合折线图
ax1
.
plot
(
loc
,
new_combination
[
'data'
],
color
=
'#C6A774'
,
marker
=
''
,
linewidth
=
3
,
label
=
origin_combination
[
'name'
])
ax1
.
legend
(
loc
=
'upper left'
,
fontsize
=
fontsize
)
# 原组合折线图
ax2
.
plot
(
loc
,
origin_combination
[
'data'
],
color
=
'#222A77'
,
marker
=
''
,
linewidth
=
3
,
label
=
new_combination
[
'name'
])
ax2
.
legend
(
loc
=
'upper center'
,
fontsize
=
fontsize
)
# 指数折线图
ax3
.
plot
(
loc
,
index
[
'data'
],
color
=
'black'
,
marker
=
''
,
linewidth
=
3
,
label
=
index
[
'name'
])
ax3
.
legend
(
loc
=
'upper right'
,
fontsize
=
fontsize
)
plt
.
show
()
def
draw_correlation_chart
():
"""相关性分析图"""
pass
if
__name__
==
'__main__'
:
product1
=
{
'name'
:
'product1'
,
'data'
:
np
.
array
([
10
,
20
,
30
,
40
,
50
])}
product2
=
{
'name'
:
'product2'
,
'data'
:
np
.
array
([
20
,
20
,
20
,
20
,
20
])}
product3
=
{
'name'
:
'product3'
,
'data'
:
np
.
array
([
20
,
20
,
20
,
20
,
20
])}
product4
=
{
'name'
:
'product4'
,
'data'
:
np
.
array
([
20
,
20
,
20
,
20
,
20
])}
product5
=
{
'name'
:
'product5'
,
'data'
:
np
.
array
([
20
,
20
,
20
,
20
,
20
])}
product6
=
{
'name'
:
'product6'
,
'data'
:
np
.
array
([
20
,
20
,
20
,
20
,
20
])}
product_list
=
[
product1
,
product2
,
product3
,
product4
,
product5
,
product6
]
cumulative
=
{
'name'
:
'totalincome'
,
'data'
:
np
.
array
([
10
,
50
,
120
,
100
,
36
])}
draw_stacked_column_chart
(
product_list
,
cumulative
)
# xlabels = ('2020-1', '2020-2', '2020-3', '2020-4', '2020-5', '2020-6', '2020-7', '2020-8', '2020-9', '2020-10', '2020-11', '2020-12')
# product = {'name': '月度回报率', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# contrast = {'name': '同比上涨', 'data': np.array([10, 50, 120, 100, 36, 0, 50, 120, 100, 36, 23, 98])}
# draw_month_return_chart(xlabels, [product], contrast)
# xlabels = ('2020-1', '2020-2', '2020-3', '2020-4', '2020-5', '2020-6', '2020-7', '2020-8', '2020-9', '2020-10', '2020-11', '2020-12')
# product1 = {'name': '塞亚成长1号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product2 = {'name': '塞亚成长2号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product3 = {'name': '塞亚成长3号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product4 = {'name': '塞亚成长4号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product5 = {'name': '塞亚成长5号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product6 = {'name': '塞亚成长6号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product7 = {'name': '塞亚成长7号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product8 = {'name': '塞亚成长8号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# product_list = [product1, product2, product3, product4, product5, product6, product7, product8]
# cumulative = {'name': '总收益', 'data': np.array([10, 50, 120, 100, 36, 0, 50, 120, 100, 36, 23, 98])}
# draw_contribution_chart(xlabels, product_list, cumulative)
# xlabels = ('2020-1', '2020-2', '2020-3', '2020-4', '2020-5', '2020-6', '2020-7', '2020-8', '2020-9', '2020-10', '2020-11', '2020-12')
# source_prod = {'name': '远澜银杏1号', 'data': np.array([10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 40, 50])}
# target_prod = {'name': '上证指数', 'data': np.array([-10, 10, 5, 55, 24, 10, 20, 8, 10, 31, 40, 32])}
# draw_comment_chart(xlabels, source_prod, target_prod)
xlabels
=
(
'2020-1'
,
'2020-2'
,
'2020-3'
,
'2020-4'
,
'2020-5'
,
'2020-6'
,
'2020-7'
,
'2020-8'
,
'2020-9'
,
'2020-10'
,
'2020-11'
,
'2020-12'
)
new_combination
=
{
'name'
:
'新组合'
,
'data'
:
np
.
array
([
20
,
30
,
40
,
50
,
60
,
20
,
30
,
40
,
50
,
60
,
50
,
60
])}
origin_combination
=
{
'name'
:
'原组合'
,
'data'
:
np
.
array
([
10
,
20
,
30
,
40
,
50
,
10
,
20
,
30
,
40
,
50
,
40
,
50
])}
index
=
{
'name'
:
'上证指数'
,
'data'
:
np
.
array
([
-
10
,
10
,
5
,
55
,
24
,
10
,
20
,
8
,
10
,
31
,
40
,
32
])}
draw_combination_chart
(
xlabels
,
new_combination
,
origin_combination
,
index
)
app/utils/html_to_pdf.py
View file @
148c8e8d
...
...
@@ -24,9 +24,9 @@ def html_to_pdf():
}
url1
=
'http://www.qimontech.com'
# url = 'http://baidu.com'
# url2 = 'https://www.cnblogs.com/zzb-yp/p/11512616.html
'
#
pdfkit.from_url(url1, '/Users/pengxiong/Desktop/out5.pdf', options=options)
pdfkit
.
from_file
(
'/Users/pengxiong/Desktop/monthReport.html'
,
'/Users/pengxiong/Desktop/out5.pdf'
,
options
=
options
)
url2
=
'https://manage.meerkat.top
'
pdfkit
.
from_url
(
url1
,
'/Users/pengxiong/Desktop/out5.pdf'
,
options
=
options
)
#
pdfkit.from_file('/Users/pengxiong/Desktop/monthReport.html', '/Users/pengxiong/Desktop/out5.pdf', options=options)
def
merge_pdf
(
pdfFiles
,
target_file
=
'/Users/pengxiong/Desktop/combine.pdf'
):
""""""
merger
=
PdfFileMerger
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment