單細(xì)胞分析之細(xì)胞交互-1:CellphoneDB


常用的細(xì)胞通訊軟件:

  • CellphoneDB:是公開的人工校正的凭疮,儲(chǔ)存受體嗤谚、配體以及兩種相互作用的數(shù)據(jù)庫(kù)滔蝉。此外穆役,還考慮了結(jié)構(gòu)組成,能夠描述異構(gòu)復(fù)合物啡专。(配體-受體+多聚體)
  • iTALK:通過平均表達(dá)量方式,篩選高表達(dá)的胚體和受體博其,根據(jù)結(jié)果作圈圖套才。(配體-受體)
  • CellChat:CellChat將細(xì)胞的基因表達(dá)數(shù)據(jù)作為輸入,并結(jié)合配體受體及其輔助因子的相互作用來模擬細(xì)胞間通訊慕淡。(配體-受體+多聚體+輔因子)
  • NicheNet // NicheNet多樣本分析 // 目標(biāo)基因的配體和靶基因活性預(yù)測(cè):通過將相互作用細(xì)胞的表達(dá)數(shù)據(jù)與信號(hào)和基因調(diào)控網(wǎng)絡(luò)的先驗(yàn)知識(shí)相結(jié)合來預(yù)測(cè)相互作用細(xì)胞之間的配體-靶標(biāo)聯(lián)系的方法背伴。( 配體-受體+信號(hào)通路)
    附:NicheNet使用的常見問題匯總

其它細(xì)胞互作軟件還包括CelltalkerSingleCellSignalR峰髓,scTensorSoptSC(這幾個(gè)也是基于配體-受體相互作用)


1. CellPhoneDB介紹

Nature protocol原文

CellPhoneDB是包含配體傻寂、受體及其相互作用的數(shù)據(jù)庫(kù),可以對(duì)細(xì)胞間的通訊分子進(jìn)行全面携兵、系統(tǒng)的分析疾掰,研究不同細(xì)胞類型之間的相互交流及通訊網(wǎng)絡(luò)。

CellPhoneDB 是目前使用最廣泛的細(xì)胞通訊分析軟件徐紧,CellPhoneDB的配體-受體數(shù)據(jù)庫(kù)集成于UniProt静檬、Ensembl、PDB并级、IUPHAR等拂檩,共存儲(chǔ)978種蛋白質(zhì):其中501種是分泌蛋白,而585種是膜蛋白嘲碧,這些蛋白質(zhì)參與1,396種相互作用稻励。CellPhoneDB數(shù)據(jù)庫(kù)還考慮了配體和受體的亞基結(jié)構(gòu),準(zhǔn)確地表示了異聚體復(fù)合物愈涩,有466個(gè)是異聚體望抽,對(duì)于準(zhǔn)確研究多亞基復(fù)合物介導(dǎo)的細(xì)胞通訊很關(guān)鍵。CellPhoneDB有474種相互作用涉及分泌蛋白履婉,而490種相互作用涉及膜蛋白煤篙,總共有250個(gè)涉及整合素的相互作用。
數(shù)據(jù)庫(kù)鏈接:https://www.cellphonedb.org/ppi-resources毁腿。
目前支持的物種:人(也可通過人和鼠的同源基因比對(duì)應(yīng)用于鼠)

2. CellPhoneDB原理

參考:https://www.cellphonedb.org/explore-sc-rna-seq

  1. CellphoneDB基于一種細(xì)胞類型的受體和另一種細(xì)胞類型的配體的表達(dá)辑奈,得出兩種細(xì)胞群之間豐富的受體-配體相互作用。對(duì)于細(xì)胞群所表達(dá)的基因狸棍,計(jì)算表達(dá)該基因的細(xì)胞百分比和基因表達(dá)平均值身害。若該基因只在該群中10%及以下的細(xì)胞中表達(dá)(默認(rèn)值為0.1)味悄,則被移除草戈。
  2. 將所有細(xì)胞的簇標(biāo)簽隨機(jī)排列1000次(可選值),并確定簇中受體平均表達(dá)水平和相互作用簇中配體平均表達(dá)水平的平均值侍瑟。對(duì)于兩種細(xì)胞類型之間每對(duì)比較中的每一個(gè)受體-配體對(duì)唐片,這產(chǎn)生了一個(gè)零分布(null distribution丙猬,亦稱伯努利分布、兩點(diǎn)分布费韭,指的是對(duì)于隨機(jī)變量X有, 參數(shù)為p(0<p<1)茧球,如果它分別以概率p和1-p取1和0為值。EX= p,DX=p(1-p)星持。伯努利試驗(yàn)成功的次數(shù)服從伯努利分布,參數(shù)p是試驗(yàn)成功的概率)抢埋。
  3. 通過計(jì)算等于或高于實(shí)際平均值的平均值的比例,可以得到了一個(gè)P值督暂,表示給定受體-配體復(fù)合物細(xì)胞類型特異性的可能性揪垄。換句話說,如果觀察到的平均值在前5%逻翁,則相互作用的P值為0.05饥努。
  4. 根據(jù)兩種細(xì)胞類型中富集到的顯著的受體-配體對(duì)的數(shù)量,對(duì)細(xì)胞類型之間高度特異性的相互作用進(jìn)行排序八回,以便手動(dòng)篩選出生物學(xué)相關(guān)的相互作用關(guān)系酷愧。

3. CellPhoneDB下載和使用

3.1 CellPhoneDB下載和主要功能介紹
  • 安裝:
    CellPhoneDB軟件倉(cāng)庫(kù)地址:https://github.com/Teichlab/cellphonedb
    PIP安裝:pip install cellphonedb(python版本需要python>3.5)
    CellPhoneDB安裝完成后,可以在終端測(cè)試是否成功缠诅。

  • CellPhoneDB主要分成method溶浴、plot、query和database4個(gè)模塊滴铅。

我們主要進(jìn)行分析的是method(分析模塊)和plot模塊(畫圖模塊)戳葵。
query是進(jìn)行數(shù)據(jù)查詢的模塊,查詢基因有哪些互作結(jié)果(get_interaction_gene結(jié)果為數(shù)據(jù)庫(kù)涉及到的基因汉匙,find_interactions_by_element可以找到特定基因的受體配體作用數(shù)據(jù)對(duì))拱烁。
database是輸入數(shù)據(jù)庫(kù),一般默認(rèn)可以不輸入噩翠,直接使用即可戏自。

  • 四個(gè)重要的函數(shù):
  • 核心可選參數(shù):

示例:

#(1)設(shè)置迭代和線程的數(shù)量
cellphonedb method statistical_analysis yourmetafile.txt yourcountsfile.txt --iterations=10 --threads=2
#(2)子項(xiàng)目文件夾
cellphonedb method analysis yourmetafile.txt yourcountsfile.txt --project-name=new_project
# (3)設(shè)置輸出路徑
mkdir custom_folder
cellphonedb method statistical_analysis yourmetafile.txt yourcountsfile.txt --output-path=custom_folder
#(4) 二次抽樣
cellphonedb method analysis yourmetafile.txt yourcountsfile.txt --subsampling --subsampling-log false --subsampling-num-cells 3000
3.2 數(shù)據(jù)準(zhǔn)備:注釋好的pbmc3k(數(shù)據(jù)下載和準(zhǔn)備見monocle
pbmc3k <- readRDS("pbmc.rds")

由于細(xì)胞類型已經(jīng)注釋好,接下來準(zhǔn)備cellphonedb的文件:表達(dá)譜文件cellphonedb_count.txt和細(xì)胞分組注釋文件cellphonedb_meta.txt伤锚。

write.table(as.matrix(pbmc3k@assays$RNA@data), 'cellphonedb_count.txt', sep='\t', quote=F)
meta_data <- cbind(rownames(pbmc3k@meta.data), pbmc3k@meta.data[,'cell_type', drop=F])  
meta_data <- as.matrix(meta_data)
meta_data[is.na(meta_data)] = "Unkown" #  細(xì)胞類型中不能有NA

write.table(meta_data, 'cellphonedb_meta.txt', sep='\t', quote=F, row.names=F)
3.3 終端運(yùn)行cellphonedb:

安裝好cellphonedb并加入環(huán)境變量后擅笔,使用終端運(yùn)行如下代碼:

cellphonedb method statistical_analysis  cellphonedb_meta.txt  cellphonedb_count.txt      --counts-data=gene_name
#如果我們count的基因是基因名格式,需要添加參數(shù)--counts-data=gene_name屯援,如果行名為ensemble名稱的話猛们,可以不添加這個(gè)參數(shù),使用默認(rèn)值即可狞洋。

終端運(yùn)行完上述代碼弯淘,在工作目錄下會(huì)得到一個(gè)out文件夾,里面有四個(gè)txt:

deconvoluted.txt:基因在亞群中的平均表達(dá)量
mean.txt:每對(duì)受體-配體的平均表達(dá)量
pvalues.txt:每對(duì)受體-配體的p值
significant_means.txt:每對(duì)受體-配體顯著性結(jié)果的平均表達(dá)量值

#cellphonedb 自己的繪圖
cellphonedb plot dot_plot 
cellphonedb plot heatmap_plot cellphonedb_meta.txt 

tree out 
#使用tree來查看cellphonedb生成的out文件夾下的文件吉懊。如果沒有tree庐橙,可以使用brew install tree假勿。
out
├── count_network.txt  ## 繪制網(wǎng)絡(luò)圖文件。注意這個(gè)文件是在cellphonedb plot中生成的态鳖,所以上面兩個(gè)plot不要漏掉了转培。
├── deconvoluted.txt
├── heatmap_count.pdf
├── heatmap_log_count.pdf
├── interaction_count.txt
├── means.txt ## 繪制點(diǎn)圖文件
├── plot.pdf
├── pvalues.txt ## 繪制點(diǎn)圖文件 
└── significant_means.txt

得到3個(gè)圖:

  1. plot.pdf
    CellPhoneDB氣泡圖:每一列為兩個(gè)細(xì)胞亞群(如:B|DC T),每一行為一對(duì)受體配體名稱(如:CD2_CD58)浆竭,顏色代表兩個(gè)亞群這兩個(gè)基因的平均表達(dá)量高低浸须,越紅表示表達(dá)越高,氣泡大小代表P值的-log10值邦泄,氣泡越大羽戒,說明其越具顯著性。
  1. heatmap_count.pdf和heatmap_log_count.pdf
    CellPhoneDB Heatmap:下面左圖和右圖其實(shí)都是對(duì)interaction_count.txt結(jié)果的展示虎韵,左圖為亞群之間相互作用受體配體數(shù)目的熱圖易稠,右圖為將這個(gè)數(shù)目取了log10。

上述文件和圖形的解讀可以參考官網(wǎng):https://www.cellphonedb.org/documentation

3.4 使用R對(duì)結(jié)果進(jìn)行可視化(主要是網(wǎng)絡(luò)圖和點(diǎn)圖)
pbmc='/practice/cellphonedb/out/' #outs下的文件放在這里了
library(psych)
library(qgraph)
library(igraph)
library(tidyverse)
netf<- "count_network.txt"
mynet <- read.delim(paste0(pbmc,"count_network.txt"), check.names = FALSE) #讀取數(shù)據(jù)
table(mynet$count)
mynet %>% filter(count>0) -> mynet  # 過濾count為0的數(shù)據(jù)(有零會(huì)報(bào)錯(cuò))
head(mynet)
net<- graph_from_data_frame(mynet) #構(gòu)建net對(duì)象
plot(net)

為了給這個(gè)網(wǎng)絡(luò)圖的邊點(diǎn)mapping上不同的屬性我們引入一串顏色

allcolour=c("#DC143C","#0000FF","#20B2AA","#FFA500","#9370DB",
            "#98FB98","#F08080","#1E90FF","#7CFC00","#FFFF00",
            "#808000","#FF00FF","#FA8072","#7B68EE","#9400D3",
            "#800080","#A0522D","#D2B48C","#D2691E","#87CEEB",
            "#40E0D0","#5F9EA0","#FF1493",
            "#FFE4B5","#8A2BE2","#228B22","#E9967A","#4682B4",
            "#32CD32","#F0E68C","#FFFFE0","#EE82EE","#FF6347",
            "#6A5ACD","#9932CC","#8B008B","#8B4513","#DEB887")

karate_groups <- cluster_optimal(net) #統(tǒng)計(jì)每個(gè)端點(diǎn)的和
coords <- layout_in_circle(net, order =
                             order(membership(karate_groups)))  # 設(shè)置網(wǎng)絡(luò)布局

E(net)$width  <- E(net)$count/10  #根據(jù)count值設(shè)置邊的寬 
plot(net, edge.arrow.size=.1, 
     edge.curved=0,
     vertex.color=allcolour,
     vertex.frame.color="#555555",
     vertex.label.color="black",
     layout = coords,
     vertex.label.cex=.7) 

但是邊的顏色和點(diǎn)的顏色還是對(duì)應(yīng)不上包蓝,我們來修改一番邊的屬性驶社。

net2 <- net  # 復(fù)制一份備用

for (i in 1: length(unique(mynet$SOURCE)) ){ #配置發(fā)出端的顏色
        E(net)[map(unique(mynet$SOURCE),function(x) {
                get.edge.ids(net,vp = c(unique(mynet$SOURCE)[i],x))
        })%>% unlist()]$color <- allcolour[i]
}  # 這波操作誰(shuí)有更好的解決方案? 

plot(net, edge.arrow.size=.1, 
     edge.curved=0,
     vertex.color=allcolour,
     vertex.frame.color="#555555",
     vertex.label.color="black",
     layout = coords,
     vertex.label.cex=.7) 

我們觀察到由于箭頭是雙向的测萎,所以兩個(gè)細(xì)胞類型之間的線條會(huì)被后來畫上去的覆蓋掉亡电,這里我們把線條做成曲線:

plot(net, edge.arrow.size=.1,  #箭頭大小設(shè)置為0.1
     edge.curved=0.2, # 只是調(diào)了曲率這個(gè)參數(shù)
     vertex.color=allcolour,
     vertex.frame.color="#555555", #圓圈顏色
     vertex.label.color="black", #標(biāo)簽顏色
     layout = coords, #網(wǎng)絡(luò)布局位點(diǎn)
     vertex.label.cex=.7#標(biāo)簽大小) 

接下來,我們來繪制第二組類型貝殼一樣的網(wǎng)絡(luò)圖硅瞧。

dev.off()
length(unique(mynet$SOURCE)) # 查看需要繪制多少?gòu)垐D份乒,以方便布局
par(mfrow=c(2,5), mar=c(.3,.3,.3,.3))

for (i in 1: length(unique(mynet$SOURCE)) ){
  net1<-net2
  E(net1)[map(unique(mynet$SOURCE),function(x) {
    get.edge.ids(net,vp = c(unique(mynet$SOURCE)[i],x))
  })%>% unlist()]$color <- allcolour[i]
  
  plot(net1, edge.arrow.size=.1, 
       edge.curved=0.4,
       vertex.color=allcolour,
       vertex.frame.color="#555555",
       vertex.label.color="black",
       layout = coords,
       vertex.label.cex=1) 
  
}

但是,細(xì)胞間通訊的頻數(shù)(count)并沒有繪制在圖上腕唧,略顯不足或辖,這就補(bǔ)上吧。

dev.off()
length(unique(mynet$SOURCE))
par(mfrow=c(2,5), mar=c(.3,.3,.3,.3))

for (i in 1: length(unique(mynet$SOURCE)) ){
        net1<-net2
        
        E(net1)$count <- ""
        E(net1)[map(unique(mynet$SOURCE),function(x) {
                get.edge.ids(net,vp = c(unique(mynet$SOURCE)[i],x))
        })%>% unlist()]$count  <- E(net2)[map(unique(mynet$SOURCE),function(x) {
                get.edge.ids(net,vp = c(unique(mynet$SOURCE)[i],x))
        })%>% unlist()]$count  # 故技重施
        
        E(net1)[map(unique(mynet$SOURCE),function(x) {
                get.edge.ids(net,vp = c(unique(mynet$SOURCE)[i],x))
        })%>% unlist()]$color <- allcolour[i]
        
        plot(net1, edge.arrow.size=.1, 
             edge.curved=0.4,
             edge.label = E(net1)$count, # 繪制邊的權(quán)重
             vertex.color=allcolour,
             vertex.frame.color="#555555",
             vertex.label.color="black",
             layout = coords,
             vertex.label.cex=1
        ) 
        
}

找兩條邊驗(yàn)證一下對(duì)應(yīng)關(guān)系枣接。

mynet %>% filter(SOURCE  == 'B',TARGET == 'DC')
  SOURCE TARGET count
1      B     DC    13

 mynet %>% filter(SOURCE  == 'Memory CD4 T',TARGET == 'B')
        SOURCE TARGET count
1 Memory CD4 T      B    15

用ggplot2 繪制點(diǎn)圖颂暇,關(guān)鍵是把兩張表合并到一起。

mypvals <- read.delim(paste0(pbmc,"pvalues.txt"), check.names = FALSE)
mymeans <- read.delim(paste0(pbmc,"means.txt"), check.names = FALSE)



# 這些基因list很有意思啊但惶,建議保存
chemokines <- grep("^CXC|CCL|CCR|CX3|XCL|XCR", mymeans$interacting_pair,value = T)
chemokines <- grep("^CXC|CCL|CCR|CX3|XCL|XCR", mymeans$interacting_pair,value = T)
th1 <- grep("IL2|IL12|IL18|IL27|IFNG|IL10|TNF$|TNF |LTA|LTB|STAT1|CCR5|CXCR3|IL12RB1|IFNGR1|TBX21|STAT4", 
            mymeans$interacting_pair,value = T)
th2 <- grep("IL4|IL5|IL25|IL10|IL13|AREG|STAT6|GATA3|IL4R", 
            mymeans$interacting_pair,value = T)
th17 <- grep("IL21|IL22|IL24|IL26|IL17A|IL17A|IL17F|IL17RA|IL10|RORC|RORA|STAT3|CCR4|CCR6|IL23RA|TGFB", 
             mymeans$interacting_pair,value = T)
treg <- grep("IL35|IL10|FOXP3|IL2RA|TGFB", mymeans$interacting_pair,value = T)
costimulatory <- grep("CD86|CD80|CD48|LILRB2|LILRB4|TNF|CD2|ICAM|SLAM|LT[AB]|NECTIN2|CD40|CD70|CD27|CD28|CD58|TSLP|PVR|CD44|CD55|CD[1-9]", 
                      mymeans$interacting_pair,value = T)
coinhibitory <- grep("SIRP|CD47|ICOS|TIGIT|CTLA4|PDCD1|CD274|LAG3|HAVCR|VSIR", 
                     mymeans$interacting_pair,value = T)
niche <- grep("CSF", mymeans$interacting_pair,value = T)


mymeans %>% dplyr::filter(interacting_pair %in% costimulatory)%>%
        dplyr::select("interacting_pair",starts_with("NK"),ends_with("NK"))  %>%  
        reshape2::melt() -> meansdf

colnames(meansdf)<- c("interacting_pair","CC","means")

mypvals %>% dplyr::filter(interacting_pair %in% costimulatory)%>%
        dplyr::select("interacting_pair",starts_with("NK"),ends_with("NK"))%>%  
        reshape2::melt()-> pvalsdf

colnames(pvalsdf)<- c("interacting_pair","CC","pvals")
pvalsdf$joinlab<- paste0(pvalsdf$interacting_pair,"_",pvalsdf$CC)
meansdf$joinlab<- paste0(meansdf$interacting_pair,"_",meansdf$CC)
pldf <- merge(pvalsdf,meansdf,by = "joinlab")

summary((filter(pldf,means >1))$means)

pldf%>% filter(means >1) %>% 
        ggplot(aes(CC.x,interacting_pair.x) )+ 
        geom_point(aes(color=means,size=-log10(pvals+0.0001)) ) +
        scale_size_continuous(range = c(1,3))+
        scale_color_gradient2(high="red",mid = "yellow",low ="darkblue",midpoint = 25  )+ theme_bw()+ 
        theme(axis.text.x = element_text(angle = -45,hjust = -0.1,vjust = 0.8)) 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載耳鸯,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末膀曾,一起剝皮案震驚了整個(gè)濱河市县爬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌添谊,老刑警劉巖财喳,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碉钠,居然都是意外死亡纲缓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門喊废,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祝高,“玉大人,你說我怎么就攤上這事污筷」す耄” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵瓣蛀,是天一觀的道長(zhǎng)陆蟆。 經(jīng)常有香客問我,道長(zhǎng)惋增,這世上最難降的妖魔是什么叠殷? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮诈皿,結(jié)果婚禮上林束,老公的妹妹穿的比我還像新娘速勇。我一直安慰自己恃锉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布禁炒。 她就那樣靜靜地躺著截歉,像睡著了一般胖腾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘪松,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天咸作,我揣著相機(jī)與錄音,去河邊找鬼宵睦。 笑死性宏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的状飞。 我是一名探鬼主播毫胜,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诬辈!你這毒婦竟也來了酵使?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤焙糟,失蹤者是張志新(化名)和其女友劉穎口渔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穿撮,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缺脉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年痪欲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攻礼。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡业踢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出礁扮,到底是詐尸還是另有隱情知举,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布太伊,位于F島的核電站雇锡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏僚焦。R本人自食惡果不足惜锰提,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芳悲。 院中可真熱鬧欲账,春花似錦、人聲如沸芭概。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罢洲。三九已至踢故,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惹苗,已是汗流浹背殿较。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桩蓉,地道東北人淋纲。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像院究,于是被迫代替她去往敵國(guó)和親洽瞬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容