This worked thank you very much.

> Also, it always helps us to help you if you provide a self-contained, minimal 
> example of your issue.

True, the thing is that I am using the data in a research project and it would 
take some time for me to anonymize and simplify the code but you are right in 
any case

Cheers
Yannis

Date: Thu, 8 Oct 2015 23:27:54 -0300
From: [email protected]
To: [email protected]
Subject: Re: [graph-tool] Controlling vertex labels in GraphWidget

Funny, this used to be documented. It seems the "List of vertex properties" got 
erased from the graph.draw documentation by accident.

If I remember right, positive values for text_position are angles for the text 
to be placed outside the vertex, while negative values cause the text to be 
centered, where -1 causes the vertex to expand with the text.

Try setting your text_position to -2 and see if that achieves what you want.

Also, it always helps us to help you if you provide a self-contained, minimal 
example of your issue.

Cheers


On Thu, Oct 8, 2015 at 6:11 PM, yannis panagis <[email protected]> wrote:



Hi,

I apologise for the long post. I am trying to draw an evolving graph and create 
some snapshots every year. I want to show the growth of the graph by increasing 
the size of the nodes and the size of the node labels. In the beginning because 
my node labels were long, drawing the graph caused the nodes to fully enclose 
the label (example attached), despite any effort to control their size 
programmatically, making the graph unreadable.

Then I discovered the (undocumented?) parameter "vertex_text_position" and 
started setting it to e.g. 4. Now whenever the nodes grow in size, as the time 
goes by, the labels are being displaced far away from the corresponding nodes. 

Three questions:
1. What are the possible values for "vertex_text_position" and what is their 
meaning
2. Why are the labels being displaced when node grows in size instead of 
staying next to the node and 
3. Is it possible to align the label at center of the node and at the same time 
ensure the node size is not adjusted to cover the entire label?

My code looks approximately like that:

pos = g.new_vertex_property("vector<double>")
col = g.new_vertex_property("vector<double>")
vf_size = g.new_vertex_property("float")

for v in g.vertices():
    pos[g.vertex(v)] = [float(g.vp['x'][v]), float(g.vp['y'][v])] # load layout 
from the existing file
    col[g.vertex(v)] = [int(g.vp['r'][v])/255.0, int(g.vp['g'][v])/255.0, 
int(g.vp['b'][v])/255.0, 0.8]

if not offscreen:
    win = GraphWindow(g, pos=pos,
                      geometry=(1024, 768),
                      edge_color=[0.6, 0.6, 0.6, 1],
                      vertex_fill_color=col,
                      )

else:

    win.graph = GraphWidget(g, pos=pos,
                            edge_color=[0.8, 0.8, 0.8, 1],
                            vertex_fill_color=col,
                            vertex_size=g.vp.size,
                            vertex_text=g.vp.label,
                            vertex_text_position=4,
                            vertex_font_size=vf_size,
                            vertex_font_family="sans-serif"
                            )
    win.add(win.graph)

def update_state():
    # Some logic to filter the graph, keep the nodes 
    # that are active at specific milestones
    # and call pixbuf.savev

    global count
    v_list = nodes_in_years[count] # maintains the nodes of that year
    for v in v_list:
        active[v] = True
        for e in list(v.out_edges()):
            e_active[e] = True

    g.set_vertex_filter(active)
    g.set_edge_filter(e_active)
    for v in g.vertices():
        g.vp.size[v] = v.in_degree()*0.9 + 1 # This has a dynamic effect of the 
node sizes
        vf_size[v] = v.in_degree()/2.0 # changes the font size

    win.graph.regenerate_surface()
    win.graph.queue_draw()

    # if doing an offscreen animation, dump frame to disk
    if offscreen:
        pixbuf = win.get_pixbuf()
        pixbuf.savev(r'./frames/graph%04d.png' % count, 'png', [], [])
    if count > years[-1]:
        sys.exit(0)
    count += 1

    # We need to return True so that the main loop will call this function more
    # than once.
    return True

Thank you
Yannis
                                          

_______________________________________________

graph-tool mailing list

[email protected]

http://lists.skewed.de/mailman/listinfo/graph-tool





_______________________________________________
graph-tool mailing list
[email protected]
http://lists.skewed.de/mailman/listinfo/graph-tool                              
          
_______________________________________________
graph-tool mailing list
[email protected]
http://lists.skewed.de/mailman/listinfo/graph-tool

Reply via email to