liurui's blogs

活成期待的样子...

本文以windows为生产环境,介绍以github为免费仓库和服务器,以及node.jshexo技术为支撑免费搭建个人博客的方法。如果想让博客链接到个人域名,那就需要去单独购买域名。

hexo操作

1. Git安装与github仓库配置仓库配置

  Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。与常用的版本控制工具 CVS, Subversion等不同, 它采用了分布式版本库的方式, 不必服务器端软件支持。windows环境下git的安装配置以及github仓库的配置, 可参考如下博文: windows搭建git环境

2. Node.Js与Hexo安装

  Hexo使用Markdown(或其他渲染引擎)解析文章,生成静态网页, 是搭建博客环境的基础环境,hexo依赖node.js;因此,安装hexo前必须安装Node.jsGit

2.1 下载/安装Node.js

    去官方下载最的.msi的新可靠版本,双击安装;

2.2 下载/安装hexo

   安装完gitnode.js之后,在本地创建一个路径用来保存hexo,其实也就是自己的本地博客代码库,比如E:\github\blog;然后,打开安装的git bash切换到刚刚创建的目录,输入npm install -g hexo-cli安装hexo;

: npm是随同Node.JS一起安装的包管理工具, 所以装好node.js就可以在git bash中使用npm工具,无需单独安装;

hexo操作

3. Hexo的基本配置

  Hexo 作为一个快速、简洁且高效的博客框架。在我们下载hexo后,首先要做的是初始化hexo,告诉hexo在哪里保存博客网站

-
初始化hexo $ hexo init [folder],没有folder属性就默认在hexo当前的路径建立并保存网站文件。查看hexo的基本命令可以参考hexo指令

-
更改hexo主题 笔者使用的next模板主题,首先切换到hexothemes文件夹下,将主题下载下来,在hexo的文件中将原始的theme配置由landscape改为next

1
git clone https://github.com/iissnan/hexo-theme-next themes/next

-
部署主题 hexo路径下的git bash输入:

1
2
hexo clean; hexo generate  #清理缓存并生成文件
hexo deploy #部署

-
配置主题 next主题的配置文件是next文件夹下的_config.yml文件

  • 写博文 $ hexo new <title> 使用默认属性在source\_posts路径下,生成一个markdown文件,然后就可以在这个文件中撰写自己的博客;
4. 绑定个人域名

  购买和注册:目前国内阿里、腾讯和百度以及华为的云都有域名购买和注册的服务,笔者在腾讯云上注册了ruitear.com这个域名。一个域名一年一般几十块钱, 还提供免费的dns域名解析服务。

  • 配置cname文件:在项目的source文件夹下新建一个名为CNAME的文件,在里面添加你购买的域名,比如我添加的是ruitear.com,有且只能添加一个。

  • github博客关联到自己的域名:在域名解析的地方添加三条记录,如下图所示;
    image

注意:blog.github.io. 是我的博客仓库名;192.30.252.153,192.30.252.154是GitHub提供的IP地址。

  • www:解析后的域名为 www.你的域名
  • @:直接解析主域名 你的域名
  • *:泛解析,匹配其他所有域名 *.你的域名

参考文献

[1] hexo中文文档:https://hexo.io/zh-cn/docs/
[2] Hexo搭建的GitHub博客之优化 http://wangwlj.com/2017/09/09/blog-opti/
[3] 在Github上利用hexo搭建个人博客 https://www.jianshu.com/p/9df4aba9c25a

————-本文结束感谢您的阅读————-

坚持创作,坚持分享!

打赏




  

    ![liurui 微信支付](/images/wechatpay.png)
    

微信支付

    ![liurui 支付宝](/images/alipay.png)
    

支付宝

Matplotlib 是一个 Python 的 2D绘图库, 使用matplotlib能够非常简单的可视化数据。在matplotlib中使用最多的模块就是pyplotpyplot非常接近Matlab的绘图实现,而且大多数的命令及其类似Matlab。在使用Matplotlib的时候需要import这个模块:

1
import matplotlib.pyplot as plot

  由于matplotlib默认字体没有中文,如果想让画图的标题支持中文的显示,必须手动添加中文字体方可,以下导入SimHei字体:

1
2
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']

  画图的时候还会依赖数组和矩阵等科学计算,所以会对numpy产生依赖;所以还需要import numpy;下面将以线图、柱状图、饼图、极坐标图和散点图等几种典型的图表,介绍pyplot这个模块的画图功能。

1. 单个图表的线图

  画单个线图和MATLAB,其实基本是一样的,首先选择一个X轴的范围,然后在这个范围内把[x,y]在对应的坐标区间画出来。完整的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## 字体的默认设置没有中文,所以需要手动添加中文字体才能显示中文
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']

import numpy as np
import matplotlib.pyplot as plot

##画单个图,多根线
def plotSignleImg():
x=np.arange(0,5,0.2) # X轴的范围,0-5,点的间距是0.2个单位
plot.plot(x,x**4,'r',x,x*90,'bs',x,x**3,'g^') ## 'r'红 'bs'蓝 'g^'绿
plot.show() # 显示画图结果

if __name__=='__main__':
plotSignleImg()

  效果图:
image

2. 多个图表在一个图

  在一个图表中画多个图,合画单个图的方式基本是一致的,唯一的区别就是,画多图的时候需要把画布分割成相应的块数,来放图表。如下例子,画两个图,需要命令plot.subplot(211)plot.subplot(212)这两行代码中的数字前边两个必须一直,最后一个数代表图的位置,这里1表示上边的位置,2表示下边的例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
## 画多个图,多根线
def plotMultiImg():
x1=np.arange(0,5,0.05)
x2=np.arange(0,5,0.05)

plot.figure(1) #启一个画布,用来承载图表的渲染,可忽略,默认会加载
plot.subplot(211) #211 2:水平方向2个图,1:垂直方向1列,1:第1个位置
plot.plot(x1,x1**4,'r',x1,x1*90,'bs',x1,x1**3,'g^',linewidth=2.0)

plot.subplot(212) # 212 2:水平方向2个图,1:垂直方向1列,1:第2个位置
plot.plot(x2,np.cos(2*np.pi*x2),'k')

plot.show()

  效果图:
image

3. 画直方图 (柱状图)

  正态分布是大家接触最多的一种数据的呈现规则;这里以正态分布为例,介绍一下怎么画一个正态分布图的直方图;首先构造一组满足正态分布的数据,取分布在[0,1]随机的1000组数据,构造正态分布数据。x=mu+sigma*np.random.randn(1000)从标准正态分布中返回n=1000个样本值,这1000个数值的大小随机在[0,1]。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def plotHitImg():
mu,sigma=100,15
x=mu+sigma*np.random.randn(1000) #从标准正态分布中返回n=1000个样本值。
bins=100
plot.hist(x,bins,normed=1,histtype='stepfilled',facecolor='b',alpha=0.75)

n,bins,patches=plot.hist(x,100,normed=1,facecolor='k')
#k 表示黑色 b blue g green r red c cyan m magenta y yellow w white
plot.xlabel("频率")
plot.ylabel("概率")
plot.title("直方图示例")
plot.text(40,0.028,'均值=100 标准差=15')
plot.axis([40,160,0,0.03])
plot.grid()
plot.show()

这里plot.hist()函数中

  • bins将直方图的取值范围进行均等划分bings个区间;
  • normed =1 表示将出现频次进行了归一化。 normed=0,则为频次;
  • alpha表示直方图的透明度[0, 1] ;
  • histtype = ‘stepfilled’ 表示去除条柱的黑色边框 , hist柱子类型
  • rwidth= :柱子与柱子之间的距离,默认是0
  • orientation:水平或垂直方向

plot.text()函数中

  • text(x,y,string,fontsize=15,verticalalignment=”top”,horizontalalignment=”right”)
  • x,y:表示坐标值上的值 也就是字符串在图标的位置;
  • string:表示说明文字
  • fontsize:表示字体大小
  • verticalalignment:垂直对齐方式,参数:[center|top|bottom|baseline]
  • horizontalalignment:水平对齐方式,参数:[center|right|left]

  效果图:
image

4. 画饼图

  饼图,在分析数据时,主要呈现各份数据在总体的比例;相同颜色的数据标记组成一个数据系列。)显示为整个饼图的百分比。这里简单用水果的例子示意,总共有苹果、西瓜、猕猴桃和芒果等四种水果。它们分别占50%、12%、20%和18%。

1
2
3
4
5
6
7
8
9
def plotPieImg():
labels=['苹果','西瓜','芒果','猕猴桃']
size=[50,12,18,20]
explode=(0,0.0,0,0)
plot.pie(size,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90,pctdistance = 0.6)

plot.axis('equal')
plot.legend() #画出标签的图
plot.show()

pyplot.pie()函数:patches,l_text,p_text = atplotlib.pyplot.pie()

参数 默认值 描述
x NA 数组。输入的数据用于创建一个饼图。
explode None 数组,可选参数,维度为数据项的个数,如explode=(0,0.5,0,0) 第二个突出
labels None 列表,可选参数,为每个饼块的标记。维度为数据项个数。
colors None 数组,可选参数,用来标注每块饼图的颜色。None:将使用当前活动环的颜色。
autopct None 字符串或函数,可选参数。如果不是None,是一个字符串或函数用带有数值饼图标注。
pctdistance 0.6 浮点数,可选参数,每个饼切片中心和通过autopct生成的文本开始之间的比例。如autopct是None,被忽略。
shadow False 布尔值,可选参数,在饼图下面画一个阴影。
labeldistance 1.1 浮点数,可选参数,被画饼标记的直径。
startangle None 浮点类型,可选参数,如果不是None,从x轴逆时针旋转饼图的开始角度。
radius None 浮点类型,可选参数,饼图的半径,如果半径是None,将被设置成1。
counterclock rue 布尔值,可选参数,指定指针方向,顺时针或者逆时针。
wedgeprops None 字典类型,可选参数,参数字典传递给wedge对象用来画一个饼图.如:wedgeprops={‘linewidth’:3}线宽为3。
textprops None 字典类型,可选参数,传递给text对象的字典参数。
center (0, 0) 浮点类型的列表,可选参数,图标中心位置。
frame False 布尔类型,可选参数,如果是true,绘制带有表的轴框架。
rotatelabels False 布尔类型,可选参数,如果为True,旋转每个label到指定的角度。
hold None
data None

返回值
patches:列表。matplotlib.patches.Wedge实例列表。
text:列表。matplotlib.text.Text实例label的列表。
autotexts:列表。A是数字标签的Text实例列表。 仅当参数autopct不为None时才返回。

  效果图:
image

5. 极坐标图

  先简单说一下极坐标系:在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对(ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。通常情况下,M的极径坐标单位为1(长度单位),极角坐标单位为rad(或°)。[参考 极坐标]。因此,画极坐标图,我们需要先建一个极坐标系,ax=plot.subplot(111,projection='polar')利用subplot函数在当前的figure中建立一个极坐标系,返回针对这个subplot的一个坐标轴Axes对象。然后设置这个subplotbarbar(left, height, width=0.8, bottom=None, **kwargs)设置一个矩形框,大小限定在left, left+width, bottom, bottom+height的范围,left,bottom,height,width四个参数决定位置和大小left决定了左边界,bottom决定了下边界,height决定了长度,width决定了宽度。对应到笛卡尔坐标系中,left决定了扇形的中线位置,然后height决定扇形的长度,bottom决定了下边界,width决定了扇形的宽度。

numpyrandom.rand()randn()

  • random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值
  • numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#面向对象的极坐标图绘制
def plotPolorImg():
N=20
theta=np.linspace(0.0,2*np.pi,N,endpoint=False) #角度
radii=10*np.random.rand(N) # 随机20个[0,10]的样本
width=np.pi/4*np.random.rand(N) 随机20个[0,1]*2pi的样本,也就是

ax=plot.subplot(111,projection='polar') #建立一个坐标系,projection='polar'表示极坐标
bars=ax.bar(theta,radii,width,bottom=0.0) #绘制一个条形图 #theta,radii,width分别是left,height, width
for r,bar in zip(radii,bars): #循环为每个bar对象设置颜色和透明度
bar.set_facecolor(plot.cm.viridis(r/10.))
bar.set_alpha(0.5) #添加颜色

plot.show()

zip()函数 将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
zip 方法在 Python2Python 3 中的不同:在 Python3 中为了减少内存,zip()返回的是一个对象。如需展示列表,需手动 list() 转换。
bar.set_facecolor() 窗口的背景颜色
bar.set_edgecolor() 窗口的边框颜色
plot.cm.viridis() 蓝-绿-黄colormap
set_alpha() 设置透明度,同plot的alpha参数,透明度[0, 1]
alpha表示直方图的透明度[0, 1] ;

  效果图:
image

6. 散点图

  散点图,顾名思义就是在图中分布的各个没有连接的孤点,也就是把某些点在坐标中明晰的表示出来。在数据的二维和三维表示中,用来发现数据分类和排布很有作用。

1
2
3
4
5
6
7
#散点图
def plotScatterImg():
#返回值 fig : matplotlib.figure.Figure object ax : Axes object or array of Axes objects.
fig,ax=plot.subplots()
ax.plot(10*np.random.rand(10),10*np.random.rand(10),'o')
ax.set_title('简单散点图') #设置图标标题
plot.show()

  效果图:
image

参考附表

python的颜色图谱(colormap), 例如在matplotlib.pyplot.imshow(X, cmap=None)

  • X: 要绘制的图像或数组;

  • cmap: 颜色图谱(colormap), 默认绘制为RGB(A)颜色空间。

颜色图谱 描述 颜色图谱 描述
row 1 col 1 row 1 col 2 hsv hsv颜色空间, 红-黄-绿-青-蓝-洋红-红
row 2 col 1 row 2 col 2 inferno 黑-红-黄
autumn 红-橙-黄 jet 蓝-青-黄-红
bone 黑-白,x线 magma 黑-红-白
cool 青-洋红 pink 黑-粉-白
copper 黑-铜 plasma 绿-红-黄
flag 红-白-蓝-黑 prism 红-黄-绿-蓝-紫-…-绿模式
gray 黑-白 spring 洋红-黄
hot 黑-红-黄-白 summer 绿-黄
viridis 蓝-绿-黄 winter 蓝-绿
学习文献

[1] 官方教程 : https://matplotlib.org/users/pyplot_tutorial.html
[2] matplotlib详细介绍 https://blog.csdn.net/sunshine_in_moon/article/details/46573117
[3] matplotlib基础绘图函数示例 https://www.jianshu.com/p/ad14fee5fb60
[4]matplotlib极坐标方法详解 https://www.cnblogs.com/kallan/p/6738577.html

————-本文结束感谢您的阅读————-

坚持创作,坚持分享!

打赏




  

    ![liurui 微信支付](/images/wechatpay.png)
    

微信支付

    ![liurui 支付宝](/images/alipay.png)
    

支付宝

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。与常用的版本控制工具 CVS, Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持.

1. git安装

  下载git windows一路安装下来.

2. 注册github账户

  访问github官网,注册一个github账户.

3. git bash添加本地仓

  通过 git bash 客户端添加添加一个本地文件夹作为本地仓库;可以通过 pwd 命令来查看当前bash窗口的路径。
image  此处静载本地f盘创建了一个git的空文夹名为:git,用来作为本地的仓库。然后,cd到git文件夹下,用git init命令初始化这个文件夹。image  初始化之后,再调用 git config --global config 本地仓库关联到远端的 github 账户,也就是你注册 github 的时候填的用户名和邮箱。image  到这里,其实已经基本建好了本地仓库和远程github仓库的连接。但是每次使用的时候都让你输入用户名和密码,很是麻烦。怎么解决呢?添加 ssh key, 可以根据官网的 git help 创建ssh秘钥。这里首先调用 $ ssh-keygen -t rsa -C "liuru@host.com" 调用创建秘钥的指令。
image  如上图所示,使用默然的方式生成,并没有进行设置,密码根据自己的喜好设置。然后一直enter到末尾,有了这个秘钥之后,我们还需要做两件事情:1、把这个密码和github账户关联起来;2、把它和本地客户端关联起来。

  • 关联的到github账户: 在github账户的setting地方有一个ssh key的你添加输入,
    生成的秘钥内容(id_rsa.pub文件中保存),到相应的地方即可;

  • 关联本地客户端: 根据上述创建的过程中的提示,我们找到相应的.ssh/id_rsa.pub找到文件。首先确保ssh客户端能用,调用 evel "$(ssh-agent -s)" 命令查看, 有 agent id 即为有用; image然后, 调用 ssh-add ~/.ssh/id_rsa image把秘钥添加到ssh客户端,这样整个过程就创建完成,就可以享受git带来的便利了。

4. 从github仓库clone内容

  在本地创建了一个与github的账号同名的文件夹,比如我的github上有一个仓库叫C-Cplus-plus的仓库,然后调用 $ git clone git@github.com:ruitear/C-C-plus-plus.git (其中ruitear是账户名)
image

5. 在仓库里面创建子文件夹

  陆github账户在网页上只能以单个文件的形式进行upload,然而并不符合我们管理文档的习惯,建立文件夹来管理文档和代码是我们必须的,为此,就需要进行添加文件夹的操作,cd到相应的版本仓库的本地文件夹,调用$ git add Sort/ . 这样就在C-Cplus-plus仓库内添加了一个Sort文件夹,当然这并不是最终形式没还需要commit操作才能生效, 也就是保存到本地仓库:$ git commit -m "相关说明"
image
  最后调用push把添加之后的仓库push到github仓库了 $git push origin master , 到这里就完成了git本地环境的搭建并与github创建了相应的连接。
【注意】,当我们往已经有的仓库中添加新的代码时记得,先pull下来更新代码赖,然后在
push,如果有冲突就解决冲突,没有的话就直接push。

————-本文结束感谢您的阅读————-

坚持创作,坚持分享!

打赏




  

    ![liurui 微信支付](/images/wechatpay.png)
    

微信支付

    ![liurui 支付宝](/images/alipay.png)
    

支付宝

0%