4大分析工具的代码表白术,520花式秀恩爱!

尽管笛卡尔和瑞典公主的故事已被证实只是杜撰,但因这个故事出名的心形函数被广为流传。今天又是一个虐单身狗的日分析师子,面对各种毫无新意的表白方式,让我们来看看理工科式的表白~

一切都是从一个故事开始的:

1650年,斯德哥尔摩街头,一个宁静的午后,笛卡尔邂逅了18岁的瑞典公主克里斯汀。

机遇巧合,一段纯粹、美好的爱情悄然萌发。

然而,没过多久,他们的恋情传到了国王的耳朵里。国王大怒,将笛卡尔放逐,而公主被软禁在宫中。 身体孱弱的笛卡尔不久便染上重病,在生命进入倒计时的那段日子,他日夜思念的还是街头偶遇的那张温暖的笑脸。他每天坚持给她写信,盼望着她的回音。然而,这些信都被国王拦截下来。在笛卡尔给克里斯汀寄出第十三封信后,他永远地离开了这个世界。此时,被软禁在宫中的小公主依然徘徊在皇宫的走廊里,思念着远方的情人。

这最后一封信上没有写一句话,只有一个方程:r=a(1-sinθ) ——传说中著名的心形函数。

不过,事实告诉我们,除非你的目标妹子也是一只Geeker(至少会用Mathematica或者MATLAB等软件),否则像笛卡尔这样单给一个函数的结局大概就是你推公式别人推妹子了……表白什么的还是选择更浅显易懂的方法吧。

接下来看看用各种数据分析软件做出的心形模型,保证亮瞎你的表白对象!

Stata

在这个特殊的日子里,特意搜集了利用Stata绘制心形线的程序,代码如下:

clear
range t 0 2*_pi 1000
gen x=16*sin(t)^3
gen y=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
egen x_min=min(x)
egen x_max=max(x)
egen y_min=min(y)
egen y_max=max(y)
gen a=(x-x_min)/(x_max-x_min)
gen b=(y-y_min)/(y_max-y_min)
line b a
gr_edit yaxis1.draw_view.setstyle, style(no)
gr_edit xaxis1.draw_view.setstyle, style(no)
gr_edit plotregion1.AddTextBox added_text editor .7055394244311991 .2810707216715078
gr_edit plotregion1.added_text_new = 1
gr_edit plotregion1.added_text_rec = 1
gr_edit plotregion1.added_text[1].style.editstyle  angle(default) size(medsmall) color(red) horizontal(left) vertical(middle) margin(zero) linegap(zero) drawbox(no) boxmargin(zero) fillcolor(bluishgray) linestyle( width(thin) color(red) pattern(solid)) box_alignment(east) editcopy
gr_edit plotregion1.added_text[1].style.editstyle size(large) editcopy
gr_edit plotregion1.added_text[1].text = {}
gr_edit plotregion1.added_text[1].text.Arrpush  "           I LOVE YOU"
graph export "C:\Desktop\520.png", as(png) wid(800)hei(600) replace

以下为输出结果:

以上程序基于stata12运行,如果有stata14的话,还可以输入中文!祝大家好运!

R

接下来是R绘制心形线,代码如下:

1)加加载程序包

library(grid)

2)绘制心形函数

heart <- function(lcolor){
t=seq(0, 2*pi, by=0.1)

x=16*sin(t)^3

y=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)

a=(x-min(x))/(max(x)-min(x))

b=(y-min(y))/(max(y)-min(y))

grid.lines(a,b,gp=gpar(col=lcolor,lty = "solid",lwd = 6))

}

heart("hotpink")

grid.newpage()

3)绘制玫瑰函数

rose=function(){
grid.circle(x=0.5, y=0.5, r=0.5,gp=gpar(fill="red",lwd = 3))

vp <- viewport(.5, .5, w=.9, h=.9)

pushViewport(vp)

grid.polygon(x=c(0.08, .5, 0.94),y=c(.22, 1.03, .22),gp=gpar(lwd =

vp2 <- viewport(.5, .5, w=.4, h=.4)

pushViewport(vp2)

grid.circle(x=0.5, y=0.5, r=0.5,gp=gpar(fill="red",lwd = 3))

vp3 <- viewport(.5, .5, w=.9, h=.9,angle=180)

pushViewport(vp3)

grid.polygon(x=c(0.08, .5, 0.94),y=c(.22, 1.03, .22),gp=gpar(lwd = 3))}

rose()

4)调整图形

grid.newpage()
pushViewport(viewport(x=0.1, y=0.1,w=0.2, h=0.2))

grid.newpage()

for (j in 1:30) {

vp <- viewport(.5, .5, w=.9, h=.9)

pushViewport(vp)

heart("hotpink")

}

5)调整图形及添加文字

grid.newpage()
vp1 <- viewport(.4, .5, w=.5, h=.5,angle=15)

pushViewport(vp1)

heart("red")

vp2 <- viewport(0.9, .27, w=.7, h=.7,angle=-30)

pushViewport(vp2)

heart("hotpink")

grid.text("执手偕老",

x=0.2,y =1.2, just = c("center", "bottom"),

gp = gpar(fontsize=30), vp = vp)

vp3 <- viewport(-0.65, 1.2, w=.3, h=.3,angle=-30)

pushViewport(vp3)

rose()

结果如下:

注:操作平台为Rstudio,由于手头电脑没有装R,所以上述程序没有验证,就交给大家自己实践了!祝好运!

以上程序来自:

http://mp.weixin.qq.com/s?__biz=MzA4NTAyMjQ2Mg==&mid=206788501&idx=1&sn=53e07723fdb395a787e57ea53bffd332&scene=21#wechat_redirect

Matlab

利用matlab抱得美人归:

f=@(x,y,z) x.^2.*z.^3+9*y.^2.*z.^3/80-(x.^2+9*y.^2/4+z.^2-1).^3;%心形曲面函数

[x,y,z]=meshgrid(-1.5:0.1:1.5);%画图范围

v=f(x,y,z);

%画图

h=patch(isosurface(x,y,z,v,0));

isonormals(x,y,z,v,h)

set(h,'FaceColor','r','EdgeColor','none');

title('Programmed By Dylan Wang')

alpha(0.6)

grid off;

axis([-1.5 1.5 -1.5 1.5 -1.5 1.5])

lighting Gouraud

h = camlight('left');

for i = 1:180;%水平旋转照相机

camorbit(1,0)

camlight(h,'left');

drawnow;

end

效果如斯:

SAS

1)准备心形图的图形数据

data heart;

length side $ 8;

pi=constant('PI');

do t=0 to 60 by 100/200;

x = -.01*(-t**2+40*t+1200)*sin(pi*t/180);

y = .01*(-t**2+40*t+1200)*cos(pi*t/180);

side='left';

output;

side='right';

x=-1*x;

output;

end;

run;

2)准备图形上的文字

这个最重要,字一定要大,而且千万记得署上自己的名字。过年的时候收到几条没有署名的祝福短信,郁闷的我也不知道该怎么问人家名字。

data anno;
input textsize y1 function :$8. label $40.;
retain drawspace "GRAPHPERCENT"

function "text"

width 80

widthunit 'percent'

textcolor "black"

textweight "bold";

cards;

20 50 text 5.20  我爱你!

15 45 text 经管之家

;

run;

3)画图

ods listing;

ods graphics / width=600px height=600px noborder;

proc sgplot data=heart sganno=anno noautolegend;

title "Heart";

series x=x y=y /group=side lineattrs=(color=red);

xaxis display=none;

yaxis display=none;

run;quit;

用SAS画曲线有多种方式:

1)用ScatterPlot画图是最自然的方式,不过需要10000个点心形图看上去才比较舒服。因为曲线的边有些锯齿,所以我不太喜欢。

2)用Series画图,这个需要点技巧。对数据不做特殊处理的话,画出来的是这样,不过也很美很特别。

3)我建议大家动手试试其他的语句,比如pbsplineplot,会有各种惊喜。

为了能出下面这个心形图,我特意加了side变量,然后通过lineattrs=(color=red)强行将两组数据用红色画线,而不是默认的一蓝一红。

Do you love SAS? Yes, I DO.(行动才是爱!)

Python

爱心的python表示:

1.第一种

"""

'17*x^2 - 16*|x|*y + 17*y^2 = 225'

"""

import numpy as np

import matplotlib.pyplot as plt

X = np.arange(-5.0, 5.0, 0.1)

Y = np.arange(-5.0, 5.0, 0.1)

x, y = np.meshgrid(X, Y)

f = 17 * x ** 2 - 16 * np.abs(x) * y + 17 * y ** 2 - 225

fig = plt.figure()

cs = plt.contour(x, y, f, 0, colors = 'r')

plt.show()

2.第二种

"""

'(x^2+y^2+y)^2 = x^2 + y^2'

"""

import numpy as np
import matplotlib.pyplot as plt
X = np.arange(-2.0, 2.0, 0.05)
Y = np.arange(-2.0, 2.0, 0.05)
x, y = np.meshgrid(X, Y)
f = (x ** 2 + y ** 2 + y) ** 2 - x ** 2 - y ** 2
fig = plt.figure()
cs = plt.contour(x, y, f, 0, colors = 'r')
plt.show()

3.第三种

"""
'8*x^2 - 9*|x|*y + 8*y^2 = 17'
"""
import numpy as np
import matplotlib.pyplot as plt
X = np.arange(-2.5, 2.5, 0.05)
Y = np.arange(-2.5, 2.5, 0.05)
x, y = np.meshgrid(X, Y)
f = 8 * x ** 2 - 9 * np.abs(x) * y + 8 * y ** 2 - 17
fig = plt.figure()
cs = plt.contour(x, y, f, 0, colors = 'r')

4.第四种

"""
'(x^2 + y^2 - 1)^3 - x^2*y^3 = 0'
"""
import numpy as np
import matplotlib.pyplot as plt
import math
X = np.arange(-2.0, 2.0, 0.05)
Y = np.arange(-2.0, 2.0, 0.05)
x, y = np.meshgrid(X, Y)
f = (x ** 2 + y ** 2 - 1) ** 2 * (x ** 2 + y ** 2 - 1)- x ** 2 *  y ** 2 * y
fig = plt.figure()
cs = plt.contour(x, y, f, 0, colors = 'r')
plt.show()

最后,感谢那些做出巨大贡献的程序猿,没有他们的代码,表白怎能如此风骚!!!

经管之家综合自网络

原文发布于微信公众号 - CDA数据分析师(cdacdacda)

原文发表时间:2016-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

BZOJ4709: [Jsoi2011]柠檬(决策单调性)

那么设\(f[i]\)表示到第\(i\)个位置的最大价值,\(s[i]\)表示到\(i\)位置,\(a[i]\)的出现次数,转移方程为

582
来自专栏java工会

百度的一道假盐面试题引发的争论,评论略叼

2044
来自专栏大数据文摘

手把手丨10分钟教你看懂K线图交易策略(附python绘图代码)

4689
来自专栏木子昭的博客

js中call和apply的区别

使用call和apply调用函数时, 往往需要传递一个this, 目的是确定被调用函数showHide运行时函数内部this的指向, 以上面的demo为例, 如...

633
来自专栏牛客网

拼多多前端一面面经 && 【更新】热乎二面面经

希望面经积累的人品能进二面吧,总得来说挺简单的 1. 两栏布局,左边固定,要求先加载内容区域,说出多种方法 2 .正则对象test方法和exec方法的不同,分别...

5969
来自专栏码神联盟

语音识别 | Java 实现 AI 人工智能技术 - 语音识别功能

说到语音识别、语音翻译、图像识别、人脸识别等等,现在已经非常非常非常普及了,看过‘最强大脑’的朋友,也应该对‘小度’这个机器人有所了解,战胜国际顶尖的‘大脑’-...

1.7K5
来自专栏菩提树下的杨过

Flash/Flex学习笔记(27):摄像头/麦克风的视频/音量指示器

在一些实时视频或视频分享应用中,需要动态显示麦克风的音量大小,或者检测视频是不是正在播放,这里演示一种简单的音量指示器 1.先写一个指示器类 其实就是一个根据百...

2618
来自专栏恰同学骚年

自己动手写游戏:坦克撕逼大战

START:最近在公交车上无聊,于是用平板看了看下载的坦克大战的开发教程,于是在晚上回家后花了两天模仿了一个,现在来总结一下。

1686
来自专栏大数据挖掘DT机器学习

python机器学习入门资料梳理

在python基本语法入门之后,就要准备选一个研究方向了。马上就要进行春季实习招聘了,加油!总结一下python机器学习方面的资料吧。 1、数据处理 1....

2945
来自专栏Python爬虫与算法进阶

来codewars与我一起玩耍吧

先看一道题目 如何使用代码表示“石头、剪刀、布”之间的关系。 即:石头 > 剪刀,剪刀 > 布, 剪刀 > 布 当时我想了很多,构造一个字典,和数字对应,但是...

35110

扫码关注云+社区