畫個圈圈祝福你

劉小澤上篇寫于18.10.3 ,中篇寫于18.10.4,下篇寫于18.10.6
學習障礙的規律往往是:不是因為它多難,而是因為你不知道它難不難!

之前就見過各種文章中的復雜美觀的圓圈圖,被震撼到,這么多的信息是如何放到一個圖中的?后來遇到一個網站Circos專門做圓圈圖,很專業的樣子,于是有心學一下。雖然看似很難,但是美好的東西,不都是奮斗出來的嗎?

前言

背景知識

Circos并不直接用R做,而是一個Perl語言開發的可視化軟件,由加拿大生信科學家Martin Krzywinski開發,可以用于描述關系型數據和多維度的數據可視化

其次,什么樣的可視化軟件會受歡迎?一是輸入簡單,不需要太多的數據處理技巧就能調整到要求的輸入格式;二是輸出美觀、快捷。這兩點,Circos都做到了

Circos的設計初衷:展示線性位置關系(如染色體上的信息)、展示一個幾何中兩個對象的關系(如比對信息)。將線性折成封閉曲線可以減少數據分散性


circos的變換

重造了個輪子?

程序設計者最大的忌諱就是“重復造輪子”,目前有許多基因組瀏覽器:UCSC(http://genome-asia.ucsc.edu/cgi-bin/hgGateway?redirect=manual&source=genome.ucsc.edu)、Ensembl(https://asia.ensembl.org/index.html)、Vista(http://pipeline.lbl.gov/cgi-bin/gateway2?bg=cin1&selector=vista)、VEGA(http://vega.archive.ensembl.org/index.html)、
ARGO。
當然,這些基因組瀏覽器含有的數據量都非常大,但如何從隱晦的龐大數據中抽出具體的數據再展示出來是個問題。比如染色體包含的數據很多,我們要是想展示染色體上的位置特征如某些基因,用circos的圓圈圖就可以兼顧大數據與小信息

數據的關系

先說下數據類型,無非就是標量數據(scalor,有大小,沒方向)、向量數據(vector,有大小和方向),將數據可視化也就是標量化、向量化。基因組就是一個一維的數據結構,上面的位置就是標量


標量向量

最常見的就是標量數據進行標量可視化,比如輸入數據是基因組位置,輸出是實值(如GC含量、保守度),就可以用直方圖(histogram)、折線圖、散點圖(scatter)畫出。當數據集比較小、關系比較簡單時還是可以看出變化趨勢的,但是當數據之間存在交叉、數據量比較大時,一致性就體現不出來啦


或者有的圖很好看,但是信息雜亂無章


又或者想表達相關性,一般使用曲線,但是在標量數據上展示曲線,數量一多就亂了


可能會想,把部分曲線抬高不就能區分開啦?但是抬高了顯示的信息量勢必會減少


為什么用圓圈?

  • 圖形可視化這么多形狀,矩形、三角形、圓形...,其中圓形比矩形更對稱,視覺壓力不會那么大,看圓形會更圓潤;

  • 圓形有效載荷(data payload)會更大:文章中在尺寸、位置等對圖片的限制還是蠻多的,如何體現數據有效載荷,這里有一個公式~軸的長度/圖片面積。


    對于矩形來說,2a/4a2 = 1/2a (2a是x、y軸長度之和); 對于圓形來說,2πa/πa2 = 2/a。圓形是矩形體現的數據的4倍

  • 軸長度多長會分散注意力,圓形更容易聚焦

看下面圖是不是更好點?

圓圈圖的一些元素

可以設置環形的數據軌道:如線形、散點、直方圖,可以設置點(線)顏色、粗細、線形狀。并且各個區域可以直接縮放,而不用截掉數據

  • 環形坐標軸
    需要帶有距離刻度的對象,比如:染色體、序列、基因圖譜、片段重疊群(contig)


  • 配置文件,在內置的基礎上進行修改,比如thickness、size、label、labelsize、grid等

  • 使用高亮highlight創建不同的顏色片段,置于所有圖層底部


    4.png
  • 基因組間的mapping
    設置links seqdup,也就是不同染色體中出現的同一個序列片段,在圓圈圖中進行展示,例如


  • 設置格式規則


    6.png
  • 組合不同的圖片類型
    左:散點+箱線+折線;右:瓦片+熱圖+直方圖


    7.png
  • 實際應用
    輸入:GFF;輸出:PNG、SVG
8.png

安裝

基于Unix(推薦linux)和perl,需要熟悉命令行

先檢查Perl

Unix是默認安裝了perl,perl 5.8之前的都需要升級;windows用戶可以用dos或者git bash,先調出來命令行,然后安裝perl,安裝 Strawberry Perl 或者 ActiveState Perl
perl在linux下的存在目錄是/bin/env,在mac下的存在目錄是/bin/usr/env

下載

# 目前最新的版本還是17年7月31的
wget http://circos.ca/distribution/circos-0.69-6.tgz
tar zxvf circos-0.69-6.tgz
# 放入環境變量
echo 'export PATH=/Your_path/circos-0.69-6/bin:$PATH' >>~/.bashrc
source ~/.bashrc

初步配置

(服務器可能需要root權限,用mac或者windows的命令行也是可以的)

# 配置cpanm,并加入環境變量
wget https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm
# 先看看需要用到的perl模塊,有一些缺失(提示:missing)的
circos -module
# 安裝缺失模塊
circos -module | grep 'missing' | awk '{a=a" "$2;}END{system("cpanm"a);}'

perl模塊缺失怎么辦?

例如缺少Clone模塊:
先在metacran網站查找:https://metacpan.org/pod/Clone
下載解壓

wget https://cpan.metacpan.org/authors/id/G/GA/GARU/Clone-0.39.tar.gz
tar zxvf Clone-0.39.tar.gz
cd Clone-0.39
# configure
perl Makefile.PL
#Checking if your kit is complete...
#Looks good
#Generating a Unix-style Makefile
#Writing Makefile for Clone
#Writing MYMETA.yml and MYMETA.json
make
make test
make install
# 如果有使用build的模塊,還是下載安裝,然后
perl Build.PL
./Build
./Build test
./Build install
# 又或者使用conda安裝
conda install -c bioconda perl-clone 

安裝的目錄

  • bin:包含circos的可執行程序(已加入環境變量)

  • data:一個文件夾karyotype,包含幾個物種的染色體信息,繪圖必須


    10.png
#chr - ID LABEL START END COLOR
chr - hs1 1 0 247249719 chr1
chr - hs2 2 0 242951149 chr2
chr - hs3 3 0 199501827 chr3
chr - hs4 4 0 191273063 chr4
chr - hs5 5 0 180857866 chr5
chr - hs6 6 0 170899992 chr6
#...省略部分
band hs1 p36.33 p36.33 0 2300000 gneg
band hs1 p36.32 p36.32 2300000 5300000 gpos25
band hs1 p36.31 p36.31 5300000 7100000 gneg
band hs1 p36.23 p36.23 7100000 9200000 gpos25
# ...
#karyotype.human.hg18.txt

前兩列:chr定義染色體,-表示父區域,染色體沒有父區域,因此用-,下面的band就有父區域了,比如這四行的band的父區域就是hs1,1號染色體;

ID是命令,同時繪制多個物種,可在ID中包含物種的代號;

LABEL:當前區域顯示的名字;

START END:整個的區域范圍,要顯示部分區域,可以后來修改;

COLOR:當前區域的顏色,定義好的顏色,存儲于etc/colors.conf

  • etc:配置文件,如

    background.black.conf #只定義了背景是深色
    background.white.conf 
    colors.hsv.conf
    colors.ucsc.conf
    colors.conf #利用RGB組合設置了顏色變量、系列顏色和染色體的顏色
    colors_fonts_patterns.conf #顏色、字體、預定義的圖形文件
    image.conf
    image.generic.conf
    patterns.conf #定義特殊小圖形的信息
    ...
    

劉小澤寫于18.10.4 看來兩篇還搞不定,內容不少

自己安裝最大的問題就是:perl模塊配置,不管自己的機器還是服務器,總是有模塊沒有配置好,需要一步步調試;而且模塊相互之間需要依賴,又是個麻煩事。

要圖方便,使用conda安裝circos也是可以的,省去不少麻煩,三步搞定

conda create -n circos
source activate circos
conda install circos -y
# 最后用circos -modules檢查一下
# conda安裝的目錄在 miniconda3/pkgs/circos-0.69.6-2

使用

官方教程 http://circos.ca/documentation/tutorials/

使用過程并非可視化的,需要以下幾步:
想想數據要被怎么展示(最麻煩的部分);
將數據轉換成circos要求的格式;
構建配置文件,可以用默認的當作模版進行修改;
運行circos生成PNG或者SVG;
微調PNG/SVG,例如添加圖例、文本標題等

配置文件概況

circos生成的是靜態文件,這個過程是配置文件起主導作用,例如全局的字體、顏色設置,這個過程需要Config::General這個模塊。其中的配置信息用空格作為分隔符,使用=定義變量名 = 變量值。有的一個相同的配置需要分成幾個小配置塊,是為了給不同的track(圓圈軌道)個性化定制,比如

<links>
# track 1
<link>
 file      = data/set1.txt
 color     = black
 ...
</link>
# track 2
<link>
 file      = data/set2.txt
 color     = red
 ...
</link>

</links>

開始符<>與結束符</>組合成一個配置塊(二者缺一不可),幾個重要的配置塊放在一個配置文件中

<ideogram> # 例如開始是這個板塊
...
</ideogram> # <-- 結尾沒有這個就報錯

配置文件中有4個地方可以自定義:(排序:優先級越來越高)

  • 全局實例:所有圖形中的所有數據點(位于<plots>或者<links>配置塊)
  • 局部實例:某個圖形中所有數據點(位于<plot>或者<link>配置塊)
  • 數據:指定某個數據點(位于data文件)
  • 規則:位于<rule>配置塊【比如這里的設置可以覆蓋之前的數據的設置】

一個全局實例可以包括多個局部實例,比如下面配置文件中fill_color = gray對全局和局部都有效,而fill_color = white 只對第一個局部實例內部有效。當許多局部實例組合在一起時,使用全局實例能提高效率

<plots> #全局plot
fill_color = gray
...
<plot> #plot1,比如這個可以負責畫環
fill_color = white
...
</plot>
<plot> #plot2,比如這個可以畫點
...
</plot>
</plots>

利用內置的配置文件

位于circos/etc的目錄下,這些配置文件都是優化好的,基本不用修改直接寫入自己的配置文件。
常用的幾個不需要更改的:

  • housekeeping.conf 基本的框架配置,直接導入
  • fonts.conf配置字體,與font目錄下的ttf或otf文件對應
  • pattern.conf配置輸出格式,與tiles目錄下的png文件對應,然后用pattern.svg.conf生成svg文件
  • colors.conf :引入了colors.brewer.confcolors.hsv.confcolors.ucsc.conf定義了顏色的不同絕對路徑,另外在本身的colors配置文件中,還支持使用像red、hs1、reds-9-seq-1的方式

幾個重要的需要稍微調整的:

  • image.conf 調整圖片大小、背景顏色、輸出目錄、輸出文件格式、染色體在圓圈的起始位置
  • ideogram.conf繪制基因組的核型數據——染色體,例如人,會把22條常染色體和X、Y繪制出來,而且在最外圈展示,每條染色體都是一段圓環。專門對染色體進行配置:染色體間距、標簽位置、是否展示bands
  • ticks.conf 刻度形式顯示染色體大小,對刻度進行配置,可以導入ideogram.conf

配置文件導入:<<include xxx.conf>>省去了主文件重復定義,可以直接引用其他的配置文件,層層引用嵌套,例如下面的配置文件邏輯關系就比較清楚:

karyotype = data/karyotype/karyotype.human.txt #指定物種是人
chromosomes_units = 10000000 
chromosomes_display_default = yes
<<include ideogram.conf>> #引用:鏈接核心圖——染色體作為外圈
<<include ticks.conf>> #引用:加刻度
...
<image> #輸出圖片
<<include etc/image.conf>> #引用:圖片設置
</image>
<<include etc/colors_fonts_patterns.conf>> #引用:設置顏色
<<include etc/housekeeping.conf>> 

畫出第一個輪廓圖/核型圖(沒有數據,只有染色體的idogram)

第一步~簡單的核型圖

1. 先準備好被導入的配置文件:circos/etc目錄下文件可以直接用

自帶配置文件

2. 再創建ideogram.conf和ticks.conf配置文件

# ideogram.conf
<ideogram>
<spacing>
default = 0.005r # 1.設置兩條染色體間空隙,每個空隙大小為周長的 0.5%(這里的r表示ring圓環,而不是半徑)
</spacing>

radius    = 0.9r # 2.1 染色體所在位置(即畫在多大的半徑上)在離圓心的 90% 處 (這里的r指的是半徑,而不是ring)
thickness = 20p # 2.2 染色體厚度
fill      = yes
fill_color = black # 2.3 染色體顏色
stroke_thickness = 2 #2.4 染色體邊框厚度
strock-color = black 

show_label = yes # 3.顯示染色體標號如CHR1
label_font = default
label_radius =1r + 75p # 1r對應ideogram對應的半徑,+75p表示在圓圈外側75p(像素pixel)的地方;如果要顯示在內側,可以1r - 75p或者0.9r類似這種
label_size = 30
label_parallel = yes #設定 label 的字體方向,yes 生成易于瀏覽的方向
label_case = upper #label大小寫顯示

show_bands            = yes # 4.染色體上條帶bands是否顯示 
fill_bands            = yes
band_stroke_thickness = 2 # 邊框厚度
band_stroke_color     = white #顏色
band_transparency     = 4 #透明度

</ideogram>

關于單位設置:共有4種:p, r, u, b。
p表示像素,1p表示1像素;
r表示相對大小,0.005r表示0.5% ring 大小;
u表示相對chromosomes_unit的長度,如果chromosomes_unit = 1000,則1u就是千分之一的染色體長度;
b表示堿基,如果染色體長1M,那么1b就是百萬分之一的長度

# ticks.conf 刻度形式顯示染色體大小
show_ticks          = yes # 1.是否顯示刻度 
show_tick_labels    = yes

<ticks>
skip_first_label = no # 2.刻度所在位置、顏色、厚度 
skip_last_label  = no
radius           = dims(ideogram,radius_outer)
tick_separation  = 3p
label_separation = 1p
multiplier       = 1e-6
color            = black
thickness        = 4p
size             = 20p

<tick>
spacing        = 1u # 3.次刻度
show_label     = no #不顯示次刻度標簽
thickness      = 2p
color          = dgrey
</tick>

<tick>
spacing        = 10u # 4.主刻度
show_label     = yes # 顯示主刻度標簽
label_size     = 20p
label_offset   = 10p
format         = %d
grid           = yes
grid_color     = dgrey
grid_thickness = 1p
grid_start     = 0.5r
grid_end       = 0.999r
</tick>

</ticks>

3. 創建主配置文件,并導入之前設置的其他配置文件

保存為任意名稱(這里以circos.conf為例)可以直接復制粘貼后,用circos -conf circos.conf得到circos.png、circos.svg文件

# 首先karyotype核型文件是必須的,定義了需要染色體的名稱、大小、顏色,并且可以根據自己的需要設定。不限于染色體,還可以是contigs、genes等可以在坐標上體現出來的。circos自帶的核型文件放在/data/karyotype下
karyotype = data/karyotype/karyotype.human.txt 
chromosomes_units = 10000000 #指定距離單位u
# chromosomes = hs1;hs2;hs3這樣寫表示只顯示三條染色體(因此下面的??設置要寫成no)

chromosomes_display_default = yes #顯示所有的染色體(no的話需要自己指定)

<<include ideogram.conf>>
<<include ticks.conf>>

<image>
<<include etc/image.conf>>
</image>

<<include etc/colors_fonts_patterns.conf>>

<<include etc/housekeeping.conf>>


下篇 劉小澤寫于18.10.6
寫到這里,其實還差得遠,需要不斷的打磨摸索才能靈活運用

核型圖內側添加數據

數據圖包括許多種:散點圖、線形圖、柱狀圖、熱圖,R能畫的圖基本Circos都支持;另外還可以畫聯系圖Connectors、高亮圖Highlights、連接圖Links(比如某些融合基因存在于1區域和2區域,就可以連接這兩個)

散點圖、線形圖、柱狀圖、熱圖數據格式

# chr start end value option(可有可無)
...
hs1 0 66666 0.01314 #其中0-66666相當于x坐標,0.01314相當于y坐標
hs1 66667 166666 0.00520 
hs1 166667 266666 0.00231 fill_color=red
#fill_color=red,z=66就是option部分,可有可無,表示設置這一塊區域顯示什么顏色等等,還有其他一些設置
...

散點圖

寫好散點圖的配置文件,加到主配置文件中即可

<plots>
type     = scatter #在全局設置可以應用一下好幾個plot,就省去了一個個設置的麻煩。首先設置繪圖類型,可以是scatter、line、histogram、heatmap
stroke_thickness = 1

<plot>
file             = data/6/snp.density.txt #指定數據文件
fill_color       = grey
stroke_color     = black
glyph            = circle #點形狀及大小
glyph_size       = 10

max   = 0.013 #設置數據范圍,超出的不考慮
min   = 0
r1    = 0.95r #繪制區域,r0是內半徑,r1是外半徑。plot1是從圓圈內部畫圖
r0    = 0.65r

<backgrounds> #設置plot1背景顏色(點密集區域一個顏色,此處用灰色;點稀疏區域用綠色區分)
<background>
color     = vvlgreen #顏色設置:very very light green (vvlgreen)
y0        = 0.006 #y0設置背景色起始位點,可以使用絕對值比如這里的0.006,也可以使用相對值,如0.75r
</background>
<background>
color     = vlgrey
y1        = 0.006 # y1設置背景色終止位點
y0        = 0.002
</background>
</backgrounds>
</plot>

<plot>
file             = data/6/snp.density.txt 
#需要的數據都在https://github.com/vigsterkr/circos/tree/master/data/6
# 或者git clone https://github.com/vigsterkr/circos.git
fill_color       = green
stroke_color     = dgreen
glyph            = rectangle
glyph_size       = 8

max   = 0.013
min   = 0.007
r1    = 1.175r #plot2是從圓圈外部畫圖;繪圖區域方面,不同的plot一般不會設置重疊
r0    = 1.075r
</plot>

</plots>
散點圖

線形圖

線形圖和散點圖類似,只不過線形圖用線代表了點,縱坐標大的點在線形圖中就是一條細高的線

<plots>

type=line
thickness = 2

<plot> # plot1
max_gap = 1u
file    = data/6/snp.density.250kb.txt
color   = vdgrey
min     = 0
max     = 0.015
r0      = 0.5r
r1      = 0.8r
fill_color = vdgrey_a3

<backgrounds> # plot1背景色
<background> #
color     = vvlgreen
y0        = 0.006 #y0設定最低閾值,將高于0.006的部分設成淡綠色
</background>
<background>
color     = vvlred
y1        = 0.002  #y1設定最高閾值,將低于0.002的部分設成淡紅色
</background>
</backgrounds>

<axes> #設置坐標軸,這個軸是沿著圓圈一圈一圈繞的,就像老唱片的磁道一樣
<axis>
color     = lgrey_a2
thickness = 1
spacing   = 0.025r #設置坐標軸間距
</axis>
</axes>

<rules>
<rule>
condition    = var(value) > 0.006 #畫出高于0.006的值,這部分值顯示在綠色區域中
color        = dgreen
fill_color   = dgreen_a1
</rule>

<rule>
condition    = var(value) < 0.002 #畫出低于0.002的值,并且這些值顯示在紅色區域中
color        = dred
fill_color   = dred_a1
</rule>
</rules>

</plot>

<plot> # plot2
max_gap = 1u
file    = data/6/snp.density.txt
color   = black
min     = 0
max     = 0.015
r0      = 1.075r
r1      = 1.15r
thickness = 1
fill_color = black_a4
</plot>

</plots>
線形圖

直方圖

它是線形圖的變體,線形圖中就是用直線把近似的點連接,直方圖中就是把點用一個個方塊表示

<plots>

<plot>
type      = histogram
file      = data/6/hist.random.txt
color       = red
r1        = 0.9r
r0        = 0.7r
max       = 1 #這個看數據具體范圍設定
min       = -1
thickness   = 10p
fill_under = yes
fill_color = red
orientation = out #控制方向(紅色向外)
</plot>
<plot>
<plot>
type      = histogram
file      = data/6/hist.random.txt
color       = green
r1        = 0.6r
r0        = 0.4r
max       = 1
min       = -1
thickness   = 10p
fill_under = yes
fill_color = green
orientation = in #同時展示下向內的直方圖(這個功能就是為了區別不同的數據集)
</plot>
</plots>

使用的測試數據只有3條染色體信息,所以先畫三條的,明白怎么畫最重要


直方圖

熱圖

要求的數據依然是:

# chr, start, end, value, and a list of optional parameters
...
hs7 36975000 36999999 33
hs7 37000000 37024999 50
hs7 37025000 37049999 60 color=blue
hs7 37050000 37074999 44
...

熱圖最大的特色就是利用顏色來區分數據,因此設置了color這個選項;并且顏色都是可以多種多樣的,具體的可以參考官方關于顏色的說明

<plots>
type = heatmap
<plot>
file = data/6/snp.number.1mb.txt
color  = spectral-9-div  #產生11種顏色,并且根據從min到max的數據賦予不同顏色。這個色板的信息位于etc/brewer.conf
stroke_thickness = 1
stroke_color     = black
min              = 1000
max              = 5000
r0 = 0.80r
r1 = 0.90r
</plot>
<plot>
file = data/6/variation.heatmap.txt
color  = spectral-9-div
stroke_thickness = 1
stroke_color     = black
min              = 2000 #為了能使顏色區分開,這里的min和max的設置非常重要,如果設置的間距太小,就容易區分不明顯
max              = 250000
r0 = 0.60r
r1 = 0.70r
</plot>
<plot>
file = data/6/variation.heatmap.txt
color  = ylorrd-9-seq-rev
stroke_thickness = 1
stroke_color     = black
min              = 2000
max              = 250000
r0 = 0.40r
r1 = 0.50r
</plot>
</plots>
熱圖

聯系圖Connector

這種圖會把核型圖上位于同一個染色體的起始和終止位點連接,不能跨染色體

輸入數據格式是:染色體 起始 終止

另外有一個特定的參數:connector_dims 需要設定5個值,分別代表畫線起始點、直線、斜線、直線、畫線終止的比例,并且5個值的和是1

<plots>

<plot>
type = connector
file = data/6/connectors.txt #要注意不同的數據使用的染色體不同,適時調整ideogram中的染色體配置,比如是否要顯示全部染色體,要展示哪幾條染色體等
r0   = 0.70r
r1   = 0.90r
connector_dims = 0,0.3,0.4,0.3,0 #表示開始畫圖=》第一條直線比例是0.3=》斜線比例是0.4=》第二條直線比例是0.3=〉畫圖終止
thickness = 2
color     = red
</plot>
<plot>
type = connector
file = data/6/connectors.txt
r0   = 0.40r
r1   = 0.60r
connector_dims = 0,0,0.7,0.3,0 #斜線占的比例越大,傾斜角度越小
thickness = 2
color     = black
</plot>
</plots>
Connector圖

高亮圖Highlights

想強調某一個條帶的某一個位置

數據格式是:染色體 起始 終止 顏色(fill_color = colr)

可以用<plot> + <type = highlights>的方式,也可以用<highlights>的方式

連接圖Links

比如想看一個基因在一個染色體與另一個染色體上發生融合的現象,用弧線表示

數據格式:1stChr start end 2nd Chr start end 會將第一個染色體的終點和第二個染色體的起點連接起來

<links>

<link>
file         = data/5/segdup.bundle3.colored.txt
color        = red
radius = 0.95r # 設定弧線起始點的位置位于0.95r的位置
bezier_radius = 0.1r # 控制弧線弧度
thickness    = 1
</link>
file         = data/5/curves.repeated.txt
color        = blue
radius = 0.95r
bezier_radius = 0.1r
thickness    = 1
</links>
Links圖

連接圖升級版—絲帶圖Ribbon

絲帶圖

終極組合圖

代碼在http://circos.ca/documentation/tutorials/2d_tracks/stacking_tracks/configuration。當然需要細細品味其中的意義,但是類型就是這幾種

終極組合圖

歡迎關注我們的公眾號~_~  
我們是兩個農轉生信的小碩,打造生信星球,想讓它成為一個不拽術語、通俗易懂的生信知識平臺。需要幫助或提出意見請后臺留言或發送郵件到Bioplanet520@outlook.com

Welcome to our bioinfoplanet!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容