数据可视化

excel提供了商业标准的可视化内容,但总显笨拙。也不希望excel形成垄断,到时候坐地起价。程序员的求知天性,也要求随心所欲得设计,总希望是设置参数而不是选项,是调用函数而不是下拉列表框。自由是要付出代价的,就像到地摊上淘A货,或者自已起炉灶。
总会用种种问题,不能显示中文,代码页不同,不能调整大小。众多的媒体推送,看着眼花缭乱。一看就会,一做就废。都成股市里的庄家,套路满满。听话就有糖吃的时代一去不复返。

  1. Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决。这里我们使用思源黑体,思源黑体是 Adobe 与 Google 推出的一款开源字体。
    官网:https://source.typekit.com/source-han-serif/cn/
    GitHub 地址:https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese
    2.很奇怪的代码。
    代码A:
  salary=pd.read_csv(u'data\\ch5\salary.csv',encoding = "gbk")
  andrews_curves(salary[['salary','begin_salary','jobtime','position']],'position')

代码B:

babaDf.plot(x=babaDf.index,y='Close')
plt.xlabel('时间')
plt.ylabel('股价(美元)')
plt.title('2019年阿里巴巴股价走势')
plt.grid(True)
plt.show()

代码A是正常理解的逻辑。andrews_curves函数传入数据参数。代码B中的Dataframe直接长一个".plot"。pandas内置了matplotlib?把matplotlib的绘图函数封装了。关键是能不能兼容进去,NO ZUO NO DIE,比如几个图作到一个图中去。
高手的思想惊人相似。引用知乎(五笔 tuhk)《python绘图-matplotlib.pyplot与pandas.plot()》一文中的话:
“注意事项:dataframe.plot()通过修改kind参数的值来改变绘图类型,matplotlib.pyplot使用不同的方法来改变绘图类型。”
https://zhuanlan.zhihu.com/p/108592028

closeDf.plot(kind='box')

3.如何把多张图作到一起
直接plot,就在一起了。神不神奇。利用subplot,可以起到分割屏幕布局的效果。plt.grid(True),可以设置网格,骨骼惊奇,出人意表。

ax1=googDf.plot(y='Close',label='谷歌')
amazDf.plot(ax=ax1,y='Close',label='亚马逊')
fbDf.plot(ax=ax1,y='Close',label='Facebook')
applDf.plot(ax=ax1,y='Close',label='苹果')
babaDf.plot(ax=ax1,y='Close',label='阿里巴巴')
txDf.plot(ax=ax1,y='Close_dollar',label='腾讯')
plt.xlabel('时间')
plt.ylabel('股价(美元)')
plt.title('2019年6家公司股价累计涨幅比较')
plt.grid(True)
plt.show()
ax2=plt.subplot(121)
googDf.plot(ax=ax2,y='Close',label='谷歌')
amazDf.plot(ax=ax2,y='Close',label='亚马逊')
plt.xlabel('时间')
plt.ylabel('股价(美元)')
plt.title('2019年2家公司股价累计涨幅比较')
plt.grid(True)
ax3=plt.subplot(122)
fbDf.plot(ax=ax3,y='Close',label='Facebook')
applDf.plot(ax=ax3,y='Close',label='苹果')
babaDf.plot(ax=ax3,y='Close',label='阿里巴巴')
txDf.plot(ax=ax3,y='Close_dollar',label='腾讯')
plt.xlabel('时间')
plt.title('2019年4家公司股价累计涨幅比较')
plt.grid(True)
plt.show()

import plotly.graph_objects as go
fig = go.Figure()
用fig.add_trace()也能实现布局切分。

4.gvim 到Notepad++,试试Jupyter Notebook。试试就试试,试试就掉沟里。

常规来说,安装了Anaconda发行版时已经自动为你安装了Jupyter Notebook的,但如果没有自动安装,那么就在终端(Linux或macOS的“终端”,Windows的“Anaconda Prompt”,以下均简称“终端”)中输入命令安装
anaconda对个人用户不收费bai,商业版du、zhi团队版、企业版需要收费。
google Colaboratory 提供免费的 GPU 计算服务!目前热门的AI项目基本都离不开GPU的计算,所以真心给力。

怎么感觉又是一个坑。现在已经掉到anaconda中去了。像不像网页的钓鱼连接。要看全部内容请注册之类的。关键看了两篇又臭又长的安装文章,还不知道什么是个头。感觉被抓去做安利了。
pip3 install jupyter
jupyter notebook
像启动重型轰炸机一样,启动了一个浏览器,然后一个自称简洁的界面,其实是然并卵的文件浏览器。别人家的集成运行,查看图表功能一样没有。后面要划重点,套路来了。
“此时你的界面当中应该还没有“Conda”和“Nbextensions”类目。不要着急,这两个类目将分别在“五、拓展功能”中的“1.关联Jupyter Notebook和conda的环境和包——‘nb_conda’”和“2.Markdown生成目录”中安装。”
想不装Conda,选Jupyter Notebook。结果选装功能的第一句就表示,Conda是必须的。而且Conda安装中包括了Jupyter Notebook,Jupyter Notebook我是Conda的三儿。Jupyter Notebook我是小弟,我全家都是小弟。不是全英文的就是高大上。
总体感觉是在玩helloKitty这个阶段,搞得很High,一到GUI程序就死翘翘。也就是一个红绿灯距离的热血沸腾。没整明白,拖那么大一家子,又是浏览器,又是mysql,又是widget的。瞧人家NotePad++,一二十兆大小。

5.选美。看谁最美。极品追求是达到matlab一样的科学幻境,又能photoshop一样满足好色之徒也追求.
Matplotlib 经常出现红配绿,赛狗屁的经典工科男风格。它的颜色可调,也有alhpa值,但没有谱。婴儿般的大红大绿。

6.实现大屏
背景图片是关键。这几乎不是一个数据计算的问题,而是一个美工的问题。找漂亮的背景图片为先。图片的主题,体现的科学知识背景。例如商务分的低饱和度主风格,加高饱和度的鲜艳对比色。
关键词:科技感 商务科技 抽象商务科技 互联网大数据 大数据科技 科技背景 电脑 概念表达 智能科技背景 未来智能 未来科技 智能科技 人工智能 大数据 互联网 大数据背景 蓝色科技 云计算 大数据新时代 科技背景 设计 现代科技 其他 300DPI JPG

7.布局实现。主要是实现合成的Figure,以及多个Figure能实现同时呈现。
方法一:用QT窗口的布局。可把学的QT用上了。
追求美的路上道阻且长。QtWebEngineWidgets.QWebEngineView()透明怎么弄?QT的WebEngine核心肯定也是泊来品。setStyleSheet(“background-color:transparent”)不行。像极了当年用系统消息折腾 windows窗口透明。记一下当淘到的软件vitrite。现代人都很现实了,不会这么去折腾。但还是很高兴在2017年的百度贴吧中找到了一个相关的论题,看到有人推荐了vitrite。本人很有感情的软件,怕人老了记不起来,特此留念。
CSDN中找到一个同样想法的人。还是高手,有福了。果然:

WebEngine只能对其page设置透明颜色,其他颜色透明度还不行:
webView->page()->setBackgroundColor(Qt::transparent);
https://blog.csdn.net/feiyangqingyun/article/details/88628376
方法二:想想show函数上能不能做点文章。
方法三:还有subplot这功能可以试试。
方法四:figure_factory看着样子像能干事。
			 plotly.figure_factory: helper methods for building specific complex charts

8.做到大屏化方面。plotly开始让人失望,或者这些都已经属于他们的收费项目,勾引进门后开始要被割韭菜。突然觉得Excel还算厚道。无论在背景设置,图形布局上商业化,可操作性强。plotly自定义性强,可编程性强,但到输出、布局、功能组合上就突然像断线了,好像设计者压根不准备向这方面发展。他们就提供个私人定制,你要稍微上点商业场景应用的成又聋又哑。有点像五笔打字,在输入单字二字词语上很强,但一到新词、网络语言方面就成老年痴呆。突然觉得OFFICE像用品牌的专家店,而这些野路子、标称个性化产品的却是像小商品市场里看人下菜的商贩。

9.Powerbi的数据可视化能力powerbi真的有种工科风,能力强悍但是颜值不高,可视化展现能力方面,PoweBI内置的图表种类相对较少,例如一些常用的玫瑰图、多层饼图、词云图、热力地图、流向地图等都不支持(需要进行市场图表拓展下载使用)。个人版免费。
10.finebi对个人免费,能够快速入手并且熟悉乃至精通。看这个图,比较符合个人的审美风格。
在这里插入图片描述

11.QT的splitter很好,但多个控件多层布局后的嵌套,让人崩溃。

12.把plotly搞成裸男的方法

			 plot_bgcolor='rgba(0,0,0,0)',#透明色,但不是这一块透明
             paper_bgcolor='rgba(0,0,0,0)',
             xaxis= {"gridcolor": "yellow","showgrid":False},
             yaxis= {"gridcolor": "yellow","showgrid":False},

13.上不了网,查不了API文档。解释性语言的魔力来一发。
#查看模块函数

print([e for e in dir(QtWebEngineWidgets.QWebEngineView) if (not e.startswith('_')) and ('set' in e) ])
print([e for e in dir(QtWidgets.QPushButton.__all__) if not e.startswith('_')])

14.QMdiSubWindow,结果两个窗口重叠时出现神奇现像。子窗口2上的widget浮大子窗口1上,而不是被子窗口1覆盖。嗨,诺基亚难怪要倒闭。应该是painter区域函数没有考虑覆盖的情况,只是考虑了子窗口平面不重叠的情况。难怪透明的悬浮窗口在浮动后就死活不能透明。毛病真是出在胎里了。
在这里插入图片描述
借用一段话,的确是QT娘胎里带来的毛病:

“windows下的透明是通过layered window实现的. Qt的透明窗口也是如此, 属于directui. 整个窗口只有一个winId(windows下即HWND). 
但是 opengl和directx都需要一个handle来绘制渲染. 
而Qt的窗口中, 如果某个子Widget获取了winid. 则打破"directui". 窗口中的所有widget都会拥有handle. 
因此透明窗口是无法单独把某个widget交给opengl或direcxt渲染的. ”

记得当初用VC6自带的工具能查看桌面程序每一个HWND。弄了半天现在这世道,能省则省了。似乎看到现在的电扇与几十年不坏、三大件时代的电扇。

QT没有封闭直接调用的函数,调用WIN32API还是逃不了,真是在Windows地盘,还是windows作主。世上从来没有救世主。

15.透明、多窗口重叠、异形窗口等,似乎到了GUI编程的深水区、软肋了。基于HTML又提到日程上来了。喜欢GUI的整体封装,但好像还是绕不开HTML。

16.微软的天坑简史。
微软的Windows用户界面开发从最初的基于C语言的Win32 API,到基于C++的MFC和基于C++模板的WTL,再到基于.NET和C#的WinForm以及WPF。
诸如Office这样的软件也没有使用MFC或者WTL。
WPF也不错,但是有时候需要使用C++来开发用户界面,MFC微软自己都不使用,WTL没有官方的维护。微软对于WTL也是一副后妈脸。
UWP微软内部开发的DirectUI框架。

17.其实做得漂亮些也不是很复杂,多用gradient和alphablend之类的函数就行了。gradient可以出磨砂效果,alphablend可以出半透明效果

17.找到PyQt5解决不透明的一个方案。
就这么简单,这么神奇。

把setAttribute(Qt::WA_TranslucentBackground);
放在self.show()的前面

但对QDockWidget还是没有卵用。估计真是QMainWindow与Widget基因不同,不同物种。
################################

C++构造函数原文:
{
   
        show();
	//设置无边界窗口并置顶
	setWindowFlags(/*Qt::CustomizeWindowHint|*/Qt::FramelessWindowHint |Qt::Tool);
	//窗口设置透明
	setAttribute(Qt::WA_TranslucentBackground,true);
	pen = QPen(Qt::red);
}
语句的顺序问题是C++的代码有误,还是PyQt5的原生问题。真想找C++去了,还是C++让人用得心安。PyQt5这种二道贩子,真不知道中间做了什么手脚。

18.QT天坑呀。在windows平台下,如果不把这个标题栏去掉,那么将不会是透明效果。
4.5版本发行以后,可以设置窗口属性Qt::WA_TranslucentBackground来设定该窗口透明显示,但是有一个问题,就是如果该窗口是个top level窗口,就会有标题栏(title bar), 在windows平台下,如果不把这个标题栏去掉(设置Qt::FramelessWindowHint 标志位就会去掉标题栏),那么将不会是透明效果,而是背景为全黑。

19.为毛画个矩形却只给显示一半,太欺负人了。

 def paintEvent(self,event):
        p=QPainter(self)
        p.setPen(self.pen)
        p.drawRect(QtCore.QRect(0,0,self.width(),self.height()))
        p.fillRect(QtCore.QRect(0, 0, 0, 0), QColor(0, 0, 100, 50) )

20.美数课代表,美数专家
在这里插入图片描述
在这里插入图片描述
21.color saturation :intensity of color hue
在这里插入图片描述
在这里插入图片描述
22.D3实现径向堆栈柱状图。得来全不费功夫。
在这里插入图片描述
23.D3实现力导向图在这里插入图片描述
24.年了几个Echart的大屏案例。还有D3.js。看来还是要皈依我佛–HTML。阿里云DataV看来是大咖。交互式、动画、3D将是比较的大项。

25.QPainter的画线看着舒心,比以前的win32API画的线好多了。也放地GDI+水平以上的抗锯齿,也可能是现在的屏幕比800*600的显示分辨率年代好太多。

26.继续作。QMovie无法半透明。没法让gif图片半透明

    self.movie1=loadGif()
    self.movie1.setWindowOpacity(0.5)
        
        
class loadGif(QWidget):
    def __init__(self):
        super().__init__()
        #self.setWindowTitle("装载GIF动画")
        #self.setFixedSize(512,288)
        self.setWindowFlags(Qt.Dialog|Qt.CustomizeWindowHint) #隐藏标题栏,窗口样式

        self.movie=QMovie("./futures/ani4.gif")  #加载本地动画文件GIF文件
        self.label=QLabel(self)
        self.label.setMovie(self.movie)
        self.label.setWindowOpacity(0.5)
        #self.movie.setWindowOpacity(0.5)
        self.movie.start()  #开启动画
	继续找原因。QtGUI,QtWidget不是一伙的。QtGUI是低层的存在。都是些QPainter、QBrush、QColor、QPen,像油漆工吃饭的家伙。没想到QMovie这样的高端货怎么也和他们是一伙的。
	The Qt GUI module provides classes for windowing system integration, event handling, OpenGL and OpenGL ES integration, 2D graphics, basic imaging, fonts and text. These classes are used internally by Qt's user interface technologies and can also be used directly, for instance to write applications using low-level OpenGL ES graphics APIs.

QT你就坑吧。以前还真是一家。问题是QLabel都去QtWidgets了,为毛QMovie还在QtGUI。

归根到底还是版本问题吧,提供的文档估计是版本qt4的,而我自己使用的是qt5,它两个之间的一个区别就是Qt5把关于控件的头文件都移到 <QtWidgets>中了,所以如果在 Qt5 中使用控件应该包含 <QtWidgets>而非<QtGui>

27.使用QWebEngineView控件时,为其指定了一个无边框、背景透明的父窗口,然后需要重绘QWebEngineView控件时,界面卡死,同时输出窗口打印出“UpdateLayeredWindowIndirect failed for ptDst=xxx”的错误。

28.还是用回了matplotlib.pyplot。与pandas结合紧。不要求美观的情况下,够用。而且不用外挂,show自己就能显示。
折腾字体吧。

plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False   # 步骤二(解决坐标轴负数的负号显示问题)

29.换matplotlib后,背景透明这事,又要一顿操作猛如虎。看来都是二百五。

30.人挡杀人,佛挡杀fo。暴该matplotlib源代码,实现透明及半透明。先用着。
backend_qt5.py文件,564行处插入下列代码。搞定。粗暴了。

print("564 FigureManagerQT backend_qt5.py 新加入解决窗口透明的问题")
self.window.setAttribute(Qt.WA_TranslucentBackground, True)
self.window.setWindowFlags(self.window.windowFlags()|Qt.SubWindow|Qt.FramelessWindowHint |Qt.Tool|Qt.WindowStaysOnTopHint)       
self.window.setWindowOpacity(0.6)

31.实现了figure.patch ,ax.patch透明,却出现了一个黄背景无法解决。不管了先暴改bac

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值