gnuplot:如何实现多色标签?

如何解决gnuplot:如何实现多色标签?

如何在gnuplot中实现多色标签? 显然,增强型文本方式提供了诸如字体,字体大小,粗体,斜体等参数。 但没有颜色。 以下变通办法改编自here

它将标签划分为与您拥有的颜色一样多的标签,并使用增强的文本功能&{space},该功能将插入一定长度的空白。

还有更好的方法吗?

代码:

### multicolor labels
reset session

Text1 = "One";   Color1 = "red"
Text2 = "Two";   Color2 = "green"
Text3 = "Three"; Color3 = "blue
Text4 = "Four";  Color4 = "magenta"
Text5 = "Five";  Color5 = "cyan"
Text6 = "Six";   Color6 = "yellow"

PosX=0
PosY=0
set label 1 Text1 at PosX,PosY tc rgb Color1
set label 2 sprintf("&{%s}%s",Text1,Text2) at PosX,PosY tc rgb Color2
set label 3 sprintf("&{%s%s}%s",Text2,Text3) at PosX,PosY tc rgb Color3
set label 4 sprintf("&{%s%s%s}%s",Text3,Text4) at PosX,PosY tc rgb Color4
set label 5 sprintf("\n%s",Text5) at PosX,PosY tc rgb Color5
set label 6 sprintf("\n&{%s}%s",Text5,Text6) at PosX,PosY tc rgb Color6

plot x
###end of code

结果 :(实际上是set terminal wxt font ",20"

enter image description here

解决方法

使用任何终端的唯一方法似乎就是您所展示的。

我不知道这是否是更好的方法,但我将向您展示如何使用与您相同的方法,但是使用“标签”绘图样式。

代码:

set terminal wxt font ",20"

$text <<EOD
"One"   0xff0000
"Two"   0x00ff00
"Three" 0x0000ff
"Four"  0xff00ff

"Five"  0x00ffff
"Six"   0xffff00
EOD

###########################################
# Rearrangement of data for "with labels"
###########################################
stat $text using 0 nooutput
set print $labels
line = "&{"
do for [i=1:STATS_records+STATS_blank] {
  if ( words($text[i]) == 0 ) {
    string = "\\n"
    color  = "black"
    cooked = line . "}" . string
    line   = cooked . "&{" 
  } else {
    string = word($text[i],1)
    color  = word($text[i],2)
    cooked = line . "}" . string
    line   = line . string
  }
  print sprintf('"%s" %s',cooked,color)
}
set print
###########################################

set xrange [-10:10]
set yrange [-10:10]

plot x,\
     $labels using (0):(0):1:2 with labels tc rgb variable left enhanced title ""

pause -1

数据块$ text的每一行代表一个字符串和一种颜色(颜色的整数)。空行表示换行符。根据这些数据,我们使用“&{string}”重建字符串数据,并将其传递给“带有标签”。


如果允许使用外部命令“ sed”,则可以使用以下技巧方法,但只能在svg终端中使用。

代码:

# This filter unescapes '<tspan','</tspan' in svg output
filter = "| sed -e 's/&lt;tspan/<tspan/g' -e 's/&lt;\\/tspan/<\\/tspan/g' > "

set terminal svg font ",20"
set output filter . "test.svg"

labeltext = "<tspan fill='red' >One</tspan>" . \
            "<tspan fill='green'>Two</tspan>" . \
            "<tspan fill='blue'>Three</tspan>" . \
            "<tspan fill='magenta'>Four</tspan>" . \
            "\n" . \
            "<tspan fill='cyan'>Five</tspan>" . \
            "<tspan fill='yellow'>Six</tspan>" 

set label labeltext at 0,0 

plot x

pause -1

在此示例中,标签文本嵌入了SVG标签。 Gnuplot将'

,

这只是一种娱乐,这是另一种“自动化”方法。您可以通过{/:<color> <your text>}设置颜色,类似于增强型文本模式。

我知道gnuplot对于解析字符串不是理想的选择,并且以下过程对于所有情况(例如对于两行以上的彩色文本,必须设置两次颜色。也许可以将整个过程打包到函数和宏中。好吧,它可以完成预期的任务,但不是很方便。欢迎进行简化和改进。

代码:

### multicolor label
reset session
 
myLabel = "This is {/:red red},this is {/:green green},\nand this is {/:blue blue}.\nHere is {/:magenta magenta}\n{/:magenta over two} lines."

# splitting the label
s = myLabel
myLabelSplit = ''
ColorDefault = 'black'
myColor(i) = word(myLabelSplit,i*2+1)
myText(i) = word(myLabelSplit,i*2+2)

do for [i=1:strlen(myLabel)] {
    c = strstrt(s,'{/:') # color
    n = strstrt(s,"\n")  # newline
    if (c==0 && n==0) {
        myLabelSplit = myLabelSplit.sprintf('"%s" "%s" "%s" "%s" ',ColorDefault,"",s)   
        break
    }    # stop if no color or newline is found
    if ((c<n && c>0) || n==0) {
        text = s[:c-1]
        color = word(s[c+3:],1)
        ctext = s[strlen(text)+3+strlen(color)+2:strstrt(s,'}')-1]
        s = s[strlen(text)+3+strlen(color)+strlen(ctext)+3:]
    }
    else {
        text = s[:n-1]
        color = ColorDefault
        ctext = "\n"
        s = s[strlen(text)+2:]
    }
    myLabelSplit = myLabelSplit.sprintf('"%s" "%s" "%s" "%s" ',text,color,ctext)   
    print myLabelSplit
}
 
# create the labels
PosX = -8
PosY = 8
space = ''
format = '&{%s}%s'
do for [i=0:words(myLabelSplit)/2-1] {
    if (myText(i) eq "\n") {
        format = "\n".format
        space = ''
    } 
    set label sprintf(format,space,myText(i)) at PosX,PosY tc rgb myColor(i) font ",16"
    if (myText(i) ne "\n") { 
        space = space.myText(i)
    }
}

plot x
### end of code

结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res