2012-04-11 8 views
3

Comment est-ce que je peux définir la taille de point dans gnuplot dans les unités des coordonnées de parcelle? En d'autres termes, les points devraient devenir plus petits si j'augmente xrange.Gnuplot: unités de taille de point

Il semble que tout dépend du terminal. Y at-il un travail autour?

Répondre

3

Voici un petit exemple en utilisant des données inline ...

plot '-' u 1:2:1 ps variable 
    1 2 
    2 3 
    3 4 
    4 5 
    5 6 
    e 

Notez que pendant qu'il est possible de changer le pointsize en utilisant une colonne de votre fichier de données, je ne suis pas au courant d'aucune façon de spécifier la taille de chaque point devrait être puisque la taille de point (et même le type de point) est une quantité dépendante du terminal. La seule solution de contournement que je peux proposer est de mettre à l'échelle les points par une valeur dépendante du terminal.

default_value=1.0 
func(x)=1.0*x #Change this to change the functional dependence of the pointsize on x. 
scale_point(x)=(GPVAL_TERM=="postscript") ? 1.0*func(x) :\ 
       (GPVAL_TERM=="png") ?  2.0*(x) :\ 
       default_value 
plot "mydata.dat" u 1:2:(scale_point($1)) w pt ps variable 

Il est laid, mais il doit faire le travail - Vous pouvez aussi écrire une fonction similaire qui retourne la PointType pour obtenir une sorte d'indépendance terminal ainsi que ...

EDIT

note, mes points augmentent taille linéairement x grossit, mais vous pouvez remplacer toutes les fonctions que vous voulez souligner les points deviennent plus petits comme bon vous semble. Ce que je dis, c'est que je ne crois pas que cette option existe puisque, comme vous le dites, «tout dépend du terminal». J'ai essayé de fournir un hack laid pour vous permettre de modifier sur une base par parcelle avec un minimum d'intervention - permettant aux terminaux différents, etc.

EDIT 2

Tout en répondant à votre commentaire, je se souvenait d'un petit coin étrange de la documentation de gnuplot qui pourrait être utile.

set style fill transparent solid noborder #whatever fillstyle you want... 
plot 'mydata' u 1:2:3 w circles 

voir help circles ... Je ne sais pas quand cette fonctionnalité a été introduite, probablement avec gnuplot 4.3, mais si vous utilisez 4.2 puis faire un essai et laissez-moi savoir comment ça se passe ...

+0

Ce n'est pas la réponse à ce que je demandais. Je sais comment faire varier la taille du point. Je ne sais pas comment spécifier la taille dans le système de coordonnées que gnuplot appelle 'first'. – hanno

+0

Je sais. Ce que je dis, c'est que je ne crois pas que cette option existe puisque, comme vous le dites, «tout ceci dépend du terminal». J'ai essayé de fournir un hack laid pour vous permettre de modifier cela sur une base par intrigue avec une intervention minimale - permettant différents terminaux, etc – mgilson

+0

@hanno, apparemment je parlais trop tôt et c'est possible (au moins si vous voulez vos points apparaissent comme des cercles). Voir ma deuxième mise à jour. – mgilson

0

Si je comprends bien la question, vous voulez juste que le pointeur soit une fonction décroissante de la gamme x. La taille exacte des points imprimés et leur apparence dépendent du terminal. Mais ce n'est pas difficile d'obtenir le comportement de base que vous voulez.

D'abord, définissez une fonction pour renvoyer le point. Essayons

sps(a,b) = 1./(b-a) 

Définissez votre xrange:

set xrange [0:3] 

Faire un terrain que vous utilisez pas:

plot sin(X) 

Nous l'avons fait afin d'obtenir certaines des variables spéciales de gnuplot défini .Maintenant, nous pouvons faire

plot sin(x) with points pt 7 ps sps(GPVAL_X_MIN, GPVAL_X_MAX) 

Si vous maintenant réinitialiser le xrange et entrez à nouveau les deux commandes parcelle, vous verrez que les changements de PointSize, inversement proportionnelle à la xrange. Vous voulez probablement une fonction différente pour les points que l'exemple "sps" que j'ai utilisé. J'espère que c'est quelque chose comme ce que tu cherchais.

+0

pour faire des parcelles que vous n'utiliserez pas, puis-je suggérer le terminal 'unknown'? Je suppose que c'est son but entier. Cependant, je suis à peu près sûr que l'auteur de la question veut un bon contrôle sur les points. – mgilson

Questions connexes